Страница 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 таблицы и все под одним псевдонимом
Ну опечатался я, с нуля ж писал

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

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

)
Куда уж проще-то?

Добавлено: 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)
и он выводит каждый артикул по три раза.
конечно можно написать заместо
но так делать нельзя, поскольку у меня нет ни одного такого прайса, в котором есть все цены, а хотелось б, что бы выводились все артикулы.
подскажите пожалуйста, что делать :?:
Добавлено: 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, было сложно???
Просто всем лень копаться в твоих... странных структурах данных. На нормальных структурах это "одно слово" не помогает.