用于求和数据的SQL查询

时间:2012-04-13 14:06:38

标签: sql sql-server tsql aggregate-functions

我的表数据如下

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

任何人都可以告诉如何编写查询以检索该数据吗?

2 个答案:

答案 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