0

我的表格数据如下

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

谁能告诉如何编写查询来检索该数据?

4

2 回答 2

6
SELECT PNO,SUM(Amount)
FROM YOURTABLE
GROUP BY PNO;
于 2012-04-13T14:10:16.973 回答
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
于 2012-04-13T15:26:00.807 回答