Количество заказа Двойной после объединения с доставкой - PullRequest
0 голосов
/ 12 ноября 2018

Мы можем иметь несколько поставок для одного заказа.Поэтому, когда я соединяю Order-Item с Delivery, я получаю несколько строк.Теперь, если я хочу получить количество заказа на уровне позиции заказа (не включая позицию поставки), я получаю неправильную агрегацию.Я понимаю, почему запрос ведет себя так, но не уверен, как сделать правильную агрегацию на каждом возможном уровне детализации.

Таблица заказов

Таблица доставки

После объединения заказов и доставки

Результат верен на идентификаторе заказа, позиции, уровне продукта.

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

Возникла проблема с данными, которые вы предоставили

Продуктом для заказа 3001, позиция 30, является P2 в одной таблице и P3 в другой

Не могли бы вы предоставить свои данные образца и таблицуструктурируйте в следующем формате, чтобы другие могли вам легко помочь

create column table T_ORDER (
ORD_ID int,
ORD_ITM int,
PROD varchar(5),
ORD_QTY int
);

create column table T_DELIV (
DELIV_ID int,
DELIV_ITM int,
ORD_ID int,
ORD_ITM int,
DELIV_QTY int,
PROD varchar(5)
);

insert into T_ORDER values (10001,10,'P1',50);
insert into T_ORDER values (10001,20,'P1',60);
insert into T_ORDER values (10001,30,'P2',40);
insert into T_ORDER values (10001,40,'P3',30);
insert into T_ORDER values (10002,50,'P4',20);


insert into T_DELIV values (50001,10,10001,10,20,'P1');
insert into T_DELIV values (50001,20,10001,10,30,'P1');
insert into T_DELIV values (50002,10,10001,20,60,'P2');
insert into T_DELIV values (50002,20,10001,30,30,'P3');
insert into T_DELIV values (50003,10,10001,40,10,'P3');
insert into T_DELIV values (50003,20,10001,40,15,'P3');
0 голосов
/ 12 ноября 2018

Вот как я бы подошел к этой проблеме. Судя по всему, ваш стол не выглядит для меня нормализованным. У вас есть ORD_ID и ORD_ITM в двух таблицах. Вы должны иметь этот подарок только в своей таблице T_ORDER, а затем иметь ORD_ITM в своей таблице T_DELIV. На диаграмме, которую вы также показали, у вас нет OrderItem_table, поэтому вам будет сложно помочь. Но с моим решением, просто укажите свой ORD_ITM только в качестве внешнего ключа в таблице доставки, а затем присоединитесь к этому полю. Надеюсь, это поможет.

...