Страница 1 из 2

Перекресный запрос

Добавлено: 02 авг 2006, 11:44
Torkvemada
Please, help, люди...
Можно ли создать каким-либо образом перекресный запрос, как это делается в Access.

Добавлено: 02 авг 2006, 11:52
CyberMax
Не силен я в Акцессе... Пример "перекрестного" запроса?

Добавлено: 02 авг 2006, 11:53
Ivan_Pisarevsky
Благородный дон имеет в виду join ?

Добавлено: 02 авг 2006, 11:59
Torkvemada
Ну что такое join я вроде как понял,
а пример перкресного запроса:
арт1 - прайс1 - цена1
арт1 - прайс2 - цена2
арт1 - прайс3 - цена3
арт2 - прайс1 - цена4
арт2 - прайс3 - цена5
...

и если это всё можно было перевести в таблицу:
прайс1 прайс2 прайс3
арт1 цена1 цена2 цена3
арт2 цена4 цена5
то в Access это называется перекресный запрос.
так можно ли сконструировать такой запрос?

Добавлено: 02 авг 2006, 12:01
Torkvemada
Извиняюсь, так вторая табличка должна лучше смотреться
прайс1 прайс2 прайс3
арт1 цена1 цена2 цена3
арт2 цена4 цена5

Добавлено: 02 авг 2006, 12:04
Torkvemada
и снова гадко получилось, может так лучше?
------------прайс1-----прайс2------прайс3
арт1-------цена1------цена2-------цена3
арт2-------цена4--------------------цена5

Добавлено: 02 авг 2006, 12:16
CyberMax
Например, вот так:

Код: Выделить всё

SELECT
    A.ID,
    A.ART_NAME
    P1.ART_PRICE,
    P2.ART_PRICE,
    P3.ART_PRICE
FROM
    ARTICUL A
    LEFT JOIN PRICE1 P ON A.ID = P1.ID_ART
    LEFT JOIN PRICE2 P ON A.ID = P2.ID_ART
    LEFT JOIN PRICE3 P ON A.ID = P3.ID_ART
ORDER BY
    A.ART_NAME
Но это при условии, что прайсы у тебя в отдельных таблицах.

Добавлено: 02 авг 2006, 12:41
Torkvemada
если бы это было в разных таблицах, то проблем бы не было, и здесь я с вами категорически согласен.
вопрос в том, что делать, если это одна таблица:

артикулы---тип прайса------Цена
арт1--------прайс1-----------цена1
арт1--------прайс2-----------цена2
арт1--------прайс3-----------цена3
арт2--------прайс1-----------цена4
арт2--------прайс3-----------цена5 и.т.д

Добавлено: 02 авг 2006, 13:06
CyberMax

Добавлено: 02 авг 2006, 13:28
Ivan_Pisarevsky
CyberMax писал(а):Например, вот так:

Код: Выделить всё

SELECT
    A.ID,
    A.ART_NAME
    P1.ART_PRICE,
    P2.ART_PRICE,
    P3.ART_PRICE
FROM
    ARTICUL A
    LEFT JOIN PRICE1 P ON A.ID = P1.ID_ART
    LEFT JOIN PRICE2 P ON A.ID = P2.ID_ART
    LEFT JOIN PRICE3 P ON A.ID = P3.ID_ART
ORDER BY
    A.ART_NAME
Но это при условии, что прайсы у тебя в отдельных таблицах.
Коллега, 3 таблицы и все под одним псевдонимом :)

что делать, если это одна таблица:
Дочитать доку до фразы group by, далее читать с удвоенным вниманием. Потом либо вложенные запросы либо приджойнить эту таблицу саму на себя 4 раза.

Добавлено: 02 авг 2006, 13:45
CyberMax
Ivan_Pisarevsky писал(а): Коллега, 3 таблицы и все под одним псевдонимом :)
Ну опечатался я, с нуля ж писал :D. Главное, идея чтобы понятна была.

Добавлено: 02 авг 2006, 14:29
Torkvemada
Спасибо, спасибо, и ещё раз спасибо!!!
непрямену воспользоваться советом :!:

Добавлено: 03 авг 2006, 07:01
Torkvemada
Работает!!! Спасибо!!! :!:
А может быть тогда ещё подскажете, как переименовать имена столбцов по имени используемого прайса :?:
(as прайс1 для каждого долго писать - может быть это как то можно упростить :?: )

Добавлено: 03 авг 2006, 08:05
Ivan_Pisarevsky
Torkvemada писал(а):(as прайс1 для каждого долго писать - может быть это как то можно упростить :?: )
Куда уж проще-то? :roll:

Добавлено: 07 авг 2006, 07:20
Torkvemada
Вот, вы люди умные, так подскажите мне дураку, как сделать так, что бы в этом таком хорошем перекресном запросе прога выводила только один артикул.
пишу я вот такой запрос:

Код: Выделить всё

select ar.articul, ar.price_kind, pr1.price_rub, pr1.price_kind, pr2.price_rub,  pr2.price_kind,
pr3.price_rub,  pr3.price_kind
from disccard ar
left join disccard pr1 on ar.articul = pr1.articul
left join disccard pr2 on ar.articul = pr2.articul
left join disccard pr3 on ar.articul = pr3.articul
inner join pricekind pr on pr.id_pricekind = ar.price_kind
where 
pr1.price_kind = 0
and pr2.price_kind = 3
and pr3.price_kind = 575
and ar.price_kind in (0, 3, 575)
и он выводит каждый артикул по три раза.
конечно можно написать заместо

Код: Выделить всё

and ar.price_kind in (0, 3, 575)

Код: Выделить всё

and ar.price_kind = 0

но так делать нельзя, поскольку у меня нет ни одного такого прайса, в котором есть все цены, а хотелось б, что бы выводились все артикулы.
подскажите пожалуйста, что делать :?:

Добавлено: 07 авг 2006, 08:57
Dimitry Sibiryakov
Прога твоя? Ну и подавляй все артикулы кроме первого в группе. Программер ты или где?

Добавлено: 07 авг 2006, 09:06
Torkvemada
Dimitry Sibiryakov писал(а):Программер ты или где?
угу, вот как неделю назад SQL освоил... :(
так как ты думаешь, программер я, или где...

может всё-таки лучше, please, подскажешь как это делается?

Добавлено: 07 авг 2006, 10:35
Ivan_Pisarevsky
Ivan_Pisarevsky писал(а):Дочитать доку до фразы group by, далее читать с удвоенным вниманием.
Ась?

Добавлено: 09 авг 2006, 13:25
Torkvemada
Ivan_Pisarevsky писал(а):
Ivan_Pisarevsky писал(а):Дочитать доку до фразы group by, далее читать с удвоенным вниманием.
Ась?
а подсказать, что нехватает ровно одного слова после функции select, было сложно???

а не один из указанных способов у меня работать не захотел :(

Добавлено: 09 авг 2006, 13:54
Dimitry Sibiryakov
Torkvemada писал(а):а подсказать, что нехватает ровно одного слова после функции select, было сложно???
Просто всем лень копаться в твоих... странных структурах данных. На нормальных структурах это "одно слово" не помогает.