我希望通过分组方式,将采购订单上不同供应商的金额与相同项目编号的金额分开。
我有5张table。我已将我当前的查询和我正在使用的表格包含在下面。
每次我使用两个内部连接时,都会显示重复的值,当我使用子查询时,我会收到一个错误,说我不能从子查询返回多个值。
CREATE TABLE stock(
stocknumber VARCHAR(30),
location VARCHAR(30)
);
INSERT INTO stock VALUES
('22-2552', 'A1');
SELECT * FROM stock
CREATE TABLE head(
location VARCHAR(30),
dateordered DATE,
ponumber INT
);
INSERT INTO head VALUES
('A1', '10/14/2022', 1),
('A1', '10/14/2022', 2),
('A1', '10/14/2022', 3),
('A1', '10/14/2022', 4);
SELECT * FROM head;
位置 | 日期排序 | 编号 |
---|
A1 | 2022-10-14 | 1 |
A1 | 2022-10-14 | 2 |
A1 | 2022-10-14 | 3 |
A1 | 2022-10-14 | 4 |
CREATE TABLE details(
stocknumber VARCHAR(30),
quantityordered INT,
vendornumber INT,
ponumber INT
);
INSERT INTO details VALUES
('22-2552', 3, 15, 1),
('22-2552', 2, 20, 2),
('22-2552', 1, 15, 3),
('22-2552', 4, 20, 4);
SELECT * FROM details;
库存编号 | 订购数量 | 供应商编号 | 产品编号 |
---|
22-2552 | 3 | 15 | 1 |
22-2552 | 2 | 20 | 2 |
22-2552 | 1 | 15 | 3 |
22-2552 | 4 | 20 | 4 |
CREATE TABLE head1(
location VARCHAR(30),
dateordered DATE,
ponumber INT
);
INSERT INTO head1 VALUES
('A1', '10/14/2022', 5),
('A1', '10/14/2022', 6),
('A1', '10/14/2022', 7),
('A1', '10/14/2022', 8);
SELECT * FROM head1;
位置 | 日期排序 | 编号 |
---|
A1 | 2022-10-14 | 5 |
A1 | 2022-10-14 | 6 |
A1 | 2022-10-14 | 7 |
A1 | 2022-10-14 | 8 |
CREATE TABLE details1(
stocknumber VARCHAR(30),
quantityordered INT,
vendornumber INT,
ponumber INT
);
INSERT INTO details1 VALUES
('22-2552', 7, 15, 5),
('22-2552', 6, 20, 6),
('22-2552', 5, 15, 7),
('22-2552', 10, 20, 8);
SELECT * FROM details1;
库存编号 | 订购数量 | 供应商编号 | 产品编号 |
---|
22-2552 | 7 | 15 | 5 |
22-2552 | 6 | 20 | 6 |
22-2552 | 5 | 15 | 7 |
22-2552 | 10 | 20 | 8 |
SELECT ST.stocknumber,
ST.location,
PH2.vendornumber AS PHVN,
PO2.vendornumber AS POVN,
SUM(PH2.quantityordered) AS phOrderQty,
SUM(PO2.quantityordered) AS poOrderQty
FROM stock ST
INNER JOIN head PH1
ON PH1.location = ST.location
INNER JOIN details PH2
ON ST.stocknumber = PH2.stocknumber
AND PH1.ponumber = PH2.ponumber
INNER JOIN head1 PO1
ON PO1.location = ST.location
INNER JOIN details1 PO2
ON ST.stocknumber = PO2.stocknumber
AND PO1.ponumber = PO2.ponumber
WHERE ST.stocknumber IN ('22-2552', 'JW00', 'JS20FT', 'JW090')
AND PH1.location = 'A1'
GROUP BY ST.stocknumber,
ST.location,
PH2.vendornumber,
PO2.vendornumber
库存编号 | 位置 | PHVN | POVN | phOrderQty | poOrderQty |
---|
22-2552 | A1 | 15 | 15 | 8 | 24 |
22-2552 | A1 | 15 | 20 | 8 | 32 |
22-2552 | A1 | 20 | 15 | 12 | 24 |
22-2552 | A1 | 20 | 20 | 12 | 32 |
我一直在回来
|库存编号|位置|PHVN|POVN|phOrderQty|poOrderQty|
| ------------ | ------------ | ------------ | ------------ | ------------ | ------------ |
|22-2552 | A1 | 15 | 15 | 8 | 24|
|22-2552 | A1 | 15 | 20 | 8 | 32|
|22-2552 | A1 | 20 | 15 | 12 | 24|
|22-2552 | A1 | 20 | 20 | 12 | 32|
我应该得到的是
|库存编号|位置|PHVN|POVN|phOrderQty|poOrderQty|
| ------------ | ------------ | ------------ | ------------ | ------------ | ------------ |
|22-2552 | A1 | 15 | 15 | 4 | 12|
|22-2552 | A1 | 20 | 20 | 6 | 16|
1条答案
按热度按时间yws3nbqq1#
您不想将PO订单与PH订单合并,您想合并它们。
(更好的方法是将它们放在同一个表中,因为您的数据结构似乎已损坏,需要将它们合并在一起。)
https://dbfiddle.uk/lROTPIER升
您甚至不需要在stock表上加入,因为您请求的所有列都已经在其他表中了。