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クエリを作成したいと思います。

pnoが同じで、TaxTypeCode1にTaxTypeCode2が含まれている場合は条件が適用され、amtが合計されます。それ以外の場合は、実際のamtが表示されます。

私の期待する出力は

PNO      Amount 
---------------
 124     1300
 124      500
 126      400
 127      500
 128      800

pnoが同じで、TaxTypeCode2(TX02)TaxTypeCode1(TX02)が同じであるため、124には1300があります。

TX01           (TX02)           124     600
(TX02)           null           124     700 

pnoが異なり、TaxTypeCode2(TX02)TaxTypeCode1(TX02)が同じであるため、126には400があります。合計しないでください。

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 および 2 番目または 1 番目の列 (2 番目が空の場合) によってデータを集計していることです。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 に答える