我的表数据如下
TaxTypeCode1 TaxTypeCode2 PNO Amount
-----------------------------------------
TX01 TX02 124 600
TX02 null 124 700
TX03 TX04 124 200
TX04 null 124 300
TX05 TX06 126 400
TX06 null 127 500
TX07 null 128 800
我想编写SQL查询来检索数据。
条件适用IF pno相同且TaxTypeCode1包含TaxTypeCode2然后将amt求和,否则显示实际amt
我的预期输出是
PNO Amount
---------------
124 1300
124 500
126 400
127 500
128 800
124有1300,因为pno相同且TaxTypeCode2(TX02)TaxTypeCode1(TX02)相同然后总和
TX01 (TX02) 124 600
(TX02) null 124 700
126有400因为pno不同而TaxTypeCode2(TX02)TaxTypeCode1(TX02)相同而不是和
TX05 (TX06) (126) 400
(TX06) null (127) 500
任何人都可以告诉如何编写查询以检索该数据吗?
答案 0 :(得分:5)
SELECT PNO,SUM(Amount)
FROM YOURTABLE
GROUP BY PNO;
答案 1 :(得分:2)
这是你的表和数据:
CREATE TABLE Test
(
TaxTypeCode1 CHAR(4),
TaxTypeCode2 CHAR(4),
PNO INT,
Amount INT
)
INSERT INTO Test VALUES('TX01', 'TX02', 124, 600)
INSERT INTO Test VALUES('TX02', null, 124, 700)
INSERT INTO Test VALUES('TX03', 'TX04', 124, 200)
INSERT INTO Test VALUES('TX04', null, 124, 300)
INSERT INTO Test VALUES('TX05', 'TX06', 126, 400)
INSERT INTO Test VALUES('TX06', null, 127,500)
INSERT INTO Test VALUES('TX07', null, 128, 800)
这是你的问题:
SELECT PNO, SUM(Amount)
FROM Test
GROUP BY PNO, COALESCE(TaxTypeCode2, TaxTypeCode1)
结果符合您的预期输出。
我发现你真正做的是通过PNO和第二列或第一列聚合数据(如果第二列是空的)。 COALESCE(TaxTypeCode2, TaxTypeCode1)
首先返回非空。
您也可以使用ISNULL(TaxTypeCode2, TaxTypeCode1)
。 COALESCE
可以有超过2个参数,例如COALESCE(TaxTypeCode3, TaxTypeCode2, TaxTypeCode1)
。
看到:
SELECT COALESCE(TaxTypeCode2, TaxTypeCode1) as sumBy, * FROM Test