Вы можете попробовать это.просто используйте LEFT JOIN
базу на Product
таблице и фильтр Barcode
, который вы хотите получить.с функцией агрегата условия, чтобы сделать это.
CREATE TABLE Product(
Sku INT,
Barcode VARCHAR(10)
);
INSERT INTO Product VALUES (1,'A');
INSERT INTO Product VALUES (2,'B');
INSERT INTO Product VALUES (3,'');
INSERT INTO Product VALUES (4,'C');
INSERT INTO Product VALUES (5,'');
INSERT INTO Product VALUES (6,'D');
CREATE TABLE DocumentLine(
Sku INT,
Qty INT,
SubTotal INT,
DocumentId INT
);
INSERT INTO DocumentLine VALUES (1, 1, 100,123);
INSERT INTO DocumentLine VALUES (2, 1, 150,124);
INSERT INTO DocumentLine VALUES (4, 2, 400,125);
INSERT INTO DocumentLine VALUES (6, 1, 120,128);
INSERT INTO DocumentLine VALUES (1, 2, 200,129);
INSERT INTO DocumentLine VALUES (4, 1, 200,131);
INSERT INTO DocumentLine VALUES (3, 1, 600,127);
CREATE TABLE Document(
Sku INT,
DocumentTypeEnum VARCHAR(50),
PaymentStatusEnum VARCHAR(50)
);
INSERT INTO Document VALUES (123 ,'Order', 'Paid');
INSERT INTO Document VALUES (124 ,'Cart', 'NotApplicable');
INSERT INTO Document VALUES (125 ,'Order', 'Pending');
INSERT INTO Document VALUES (126 ,'Cart', 'NotApplicable');
INSERT INTO Document VALUES (127 ,'Cart', 'NotApplicable');
INSERT INTO Document VALUES (128 ,'Order', 'Failed');
INSERT INTO Document VALUES (129 ,'Order', 'Paid');
INSERT INTO Document VALUES (130 ,'Cart', 'NotApplicable');
INSERT INTO Document VALUES (131 ,'Order', 'Paid');
Запрос 1 :
select
p.sku,
Barcode,
SUM(case when DocumentTypeEnum = 'Order' and PaymentStatusEnum = 'Paid' then Qty else 0 end) 'Qty',
SUM(case when DocumentTypeEnum = 'Order' and PaymentStatusEnum = 'Paid' then SubTotal else 0 end) 'SubTotal'
from product p
left join DocumentLine dl on dl.sku = p.sku
left join Document d on dl.DocumentId = d.Sku
WHERE Barcode <> '' OR Barcode IS NOT NULL
group by p.sku,Barcode
Результаты :
| sku | Barcode | Qty | SubTotal |
|-----|---------|-----|----------|
| 1 | A | 3 | 300 |
| 2 | B | 0 | 0 |
| 4 | C | 1 | 200 |
| 6 | D | 0 | 0 |