Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности

Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
28.06.2001, 12:09
|
|||
|---|---|---|---|
|
|||
"Тройной" запрос ... |
|||
|
#18+
Привет всем! Подскажите, а то ничего в голову уже не лезет У меня есть прайс, который реализован в виде двух таблиц, одна из которых - название и вид прайса, другая - позиции прайса. Соотвественно эти таблицы связаны по ID. Я формирую список товара, в котором берется номенклатурная позиция и цепляются к ней три вида цен (каждый из своего прайса). Беда в том, что прайсы могут быть неоднородными по составу, т.е. в одном данная номенклатурная позиция имеется, а в другом - нет. Как мне составить запрос, который выводил бы все позиции номенклатуры с тремя ценами, но в случае отсутствия одной из цен проставлял бы нули? Что-то типа: CREATE VIEW price_records AS SELECT detail, p_r1.price, p_r2.price, p_r3.price, FROM detail d INNER JOIN price_rec p_r ON d.detail_id = p_r.detail_id AND INNER JOIN price_rec p_r1 ON d.detail_id = p_r1.detail_id AND INNER JOIN price_rec p_r2 ON d.detail_id = p_r2.detail_id AND INNER JOIN price_rec p_r3 ON d.detail_id = p_r3.detail_id AND d.base_id = p_r3.base_id WHERE (p_r1.price_id = 'Прайс 1') AND (p_r2.price_id = 'Прайс 2') AND (p_r3.price_id = 'Прайс 3') В этом запросе у меня выводятся лишь позиции со тремя непустыми ценами (detail - справочник номенклатуры, price_rec - вид с записями прайсов, detail_id - идентификатор номенклатуры, name - наименование номенклатуры, price - цена) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.06.2001, 12:18
|
|||
|---|---|---|---|
"Тройной" запрос ... |
|||
|
#18+
SELECT detail, isnull(p_r1.price,0), isnull(p_r2.price,0), isnull(p_r3.price,0) FROM detail d INNER JOIN price_rec p_r ON d.detail_id = p_r.detail_id AND LEFT JOIN price_rec p_r1 ON d.detail_id = p_r1.detail_id AND Left JOIN price_rec p_r2 ON d.detail_id = p_r2.detail_id AND Left JOIN price_rec p_r3 ON d.detail_id = p_r3.detail_id AND d.base_id = p_r3.base_id WHERE (p_r1.price_id = 'Прайс 1') AND (p_r2.price_id = 'Прайс 2') AND (p_r3.price_id = 'Прайс 3') ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.06.2001, 13:10
|
|||
|---|---|---|---|
|
|||
"Тройной" запрос ... |
|||
|
#18+
2 Dmitry Спасибо. Один вопрос - а не выдаст ли данный запрос по отдельной строке на каждый вид цены, типа: Наименование Цена1 Цена2 Цена3 шина 1000 0 0 шина 0 1000 0 шина 0 0 1000 Или я чего-то не понимаю? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.06.2001, 13:13
|
|||
|---|---|---|---|
|
|||
"Тройной" запрос ... |
|||
|
#18+
2 Admin А зачем убираются пробелы из строчек? Иногда они бывают нужны... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
29.06.2001, 08:52
|
|||
|---|---|---|---|
"Тройной" запрос ... |
|||
|
#18+
Во-первых, извиняюсь за неточности, но с другой стороны я не проверял Ваш запрос, потому как Вы написали что он работает, хотя если посмотреть повнимательней, то возникает вопрос как это вообще работает конструкция "price_rec p_r1 ON d.detail_id = p_r1.detail_id AND INNER JOIN" (and перед join-ом) -------------------------------------- Решение в нормальном виде: create table detail (detail_id int, detail varchar(100)) create table price_rec (price_id varchar(40),detail_id int, price int) insert into detail values(1,'Memory') insert into detail values(2,'Processor') insert into detail values(3,'Monitor') insert into price_rec values('Прайс1',1,4) insert into price_rec values('Прайс2',1,3) insert into price_rec values('Прайс3',1,6) insert into price_rec values('Прайс1',2,4) insert into price_rec values('Прайс3',2,4) -------------------------------------------- SELECT detail, isnull(p_r1.price,0) as price1, isnull(p_r2.price,0) as price2 , isnull(p_r3.price,0) as price3 FROM detail d left JOIN price_rec p_r1 ON d.detail_id = p_r1.detail_id and p_r1.price_id = 'Прайс1' Left JOIN price_rec p_r2 ON d.detail_id = p_r2.detail_id and p_r2.price_id = 'Прайс2' Left JOIN price_rec p_r3 ON d.detail_id = p_r3.detail_id and p_r3.price_id = 'Прайс3' -------------------------------------------------- Результат: Memory 4 3 6 Processor 4 0 4 Monitor 0 0 0 Я так понимаю это и требовалось ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
29.06.2001, 12:09
|
|||
|---|---|---|---|
|
|||
"Тройной" запрос ... |
|||
|
#18+
2 Dmitry OK! Это мне и требовалось, большое Вам спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
29.06.2001, 12:12
|
|||
|---|---|---|---|
|
|||
"Тройной" запрос ... |
|||
|
#18+
PS Насчет AND перед INNER JOIN - извини погорячился, обрезая полную версию вида ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
02.07.2001, 14:14
|
|||
|---|---|---|---|
|
|||
"Тройной" запрос ... |
|||
|
#18+
... а как это здорово в Access-SQL с помощью TRANSFORM и PIVOT решается... эх... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
03.07.2001, 05:16
|
|||
|---|---|---|---|
|
|||
"Тройной" запрос ... |
|||
|
#18+
2 am (a_mitin) В том-то и дело, большиство моих задач в прошлом были реализованы именно на Access. Теперь пришло время пожинать плоды В тех организациях, где число пользователей и размеры информации не сильно возросли, Access еще справляется, но этим лучше не обольщаться... По различным историям непредсказуемого краха БД на Access мне можно уже сочинять мемуары ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=46&mobile=1&tid=1826311]: |
0ms |
get settings: |
8ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
67ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
26ms |
get tp. blocked users: |
1ms |
| others: | 250ms |
| total: | 375ms |

| 0 / 0 |
