2021-03-17_SQL练习

如下一张合同表T0317

现在想获得每个直接合同的价格以及对应的补充合同的价格,得到的结果大致如下:该如何写这个SQL?

测试数据:

CREATE TABLE T0317 
(
ID INT,
Type VARCHAR(20),
MasterID INT,
Amount INT
)

INSERT INTO T0317 VALUES (1,'直接合同',NULL,5000);
INSERT INTO T0317 VALUES (2,'补充合同',1,1000);
INSERT INTO T0317 VALUES (3,'补充合同',1,500);
INSERT INTO T0317 VALUES (4,'直接合同',NULL,6000);
INSERT INTO T0317 VALUES (5,'直接合同',NULL,4000);
INSERT INTO T0317 VALUES (6,'补充合同',5,1000);
View Code

参考答案:

思路:
使用连表查询,将补充合同的MasterID和直接合同的ID对应,再将type=直接合同的条件过滤数据,最后根据ID进行分组,输出ID,Type,补充合同的金额使用IFNULL(SUM(Amount),0)2个函数进行计算.

SELECT A.ID,A.Type,A.Amount,IFNULL(SUM(B.Amount),0) FROM T0317 A LEFT JOIN T0317 B ON A.ID=B.MasterID WHERE A.Type='直接合同' GROUP BY A.ID;
View Code
原文地址:https://www.cnblogs.com/wangyadong/p/14550135.html