繁体   English   中英

SQL查询汇总数据

[英]SQL query to sum the data

我的表数据如下

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查询来检索数据。

如果pno相同且TaxTypeCode1包含TaxTypeCode2然后将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

谁能说出如何编写查询来检索该数据的方法?

SELECT PNO,SUM(Amount)
FROM YOURTABLE
GROUP BY PNO;

这是您的表和数据:

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可以具有两个以上的参数,例如COALESCE(TaxTypeCode3, TaxTypeCode2, TaxTypeCode1)

看到:

SELECT COALESCE(TaxTypeCode2, TaxTypeCode1) as sumBy, * FROM Test

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM