powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Помогите составить запрос. Снова.
4 сообщений из 4, страница 1 из 1
Помогите составить запрос. Снова.
    #38588804
Marcello
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Таблица состава накладной выглядит так
Код: plsql
1.
2.
3.
4.
5.
CREATE TABLE REF_DD (
    DOC          BIGINT NOT NULL, -- ID накладной
    TOV          BIGINT NOT NULL, -- ID товара 
    PRICE        NUMERIC(15,4)    -- цена
);

Таблица связей накладных выглядит так
Код: plsql
1.
2.
3.
4.
CREATE TABLE REF_DС (
    DOC1          BIGINT NOT NULL, -- ID накладной parent 
    DOC2          BIGINT NOT NULL -- ID накладной child
);


Не получается составить запрос, который бы выбрал цены на товар из определенных "родительских" накладных, но при условии, что во всех этих накладных товар имеет одинаковую цену. Пока есть такой запрос:
Код: plsql
1.
2.
3.
4.
5.
6.
select dd2.TOV, dd1.PRICE
from ref_dc dc
left join ref_dd dd2 on dd2.DOC = dc.DOC2
left join ref_dd dd1 on dd1.DOC = dc.DOC1 and dd1.TOV = dd2.TOV
where dc.DOC1 in (32780534001, 32098092001) and dc.DOC2 = 32103157001
group by 1, 2


В моем случае он возвращает 3 строки:
Код: plsql
1.
2.
3.
31807927001	35
31807927001	36
31807928001	33


Первые две строки не должны попасть в запрос, т.к. в накладных (32780534001, 32098092001) этот товар (31807927001) имеет разную цену. Должна выбраться только последняя строка, причем необязательно, чтобы этот товар присутствовал в обеих "родительских" накладных одновременно. Важно, что на этот товар цена однозначна.
...
Рейтинг: 0 / 0
Помогите составить запрос. Снова.
    #38588810
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну поставь условие having min(price) = max(price).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Помогите составить запрос. Снова.
    #38588825
Marcello
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за идею. Получилось так:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
select s.TOV, s.minprice from (
select dd2.TOV, min(dd1.PRICE) as minprice, max(dd1.PRICE) as maxprice
from ref_dc dc
left join ref_dd dd2 on dd2.DOC = dc.DOC2
left join ref_dd dd1 on dd1.DOC = dc.DOC1 and dd1.TOV = dd2.TOV
where dc.DOC1 in (32780534001, 32098092001) and dc.DOC2 = 32103157001
group by 1 ) s
where s.minprice = s.maxprice
...
Рейтинг: 0 / 0
Помогите составить запрос. Снова.
    #38588841
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MarcelloПолучилось так:
А назачем тут derived table-то?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Помогите составить запрос. Снова.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]