2

IntlAir と DomesticAir の 2 つの列を作成しようとしています。データに と呼ばれるブール列があり、 IntlAir は が の場合にInternational戻り、 DomAir はの場合にその合計を返します。Penalty + SellingFareInternationalTRUEInternational = FALSE

この金額をDKごとに月ごとに表示したいと思います。

私のコードは次のとおりです。

SELECT data.PostingMonth, data.DK_Number
     , (SELECT sum(data.Penalty + data.SellingFare)
        FROM data
        WHERE data.International = TRUE) AS IntlAir
     , (SELECT sum(data.Penalty + data.SellingFare)
        FROM data
        WHERE data.International = FALSE) AS DomesticAir
FROM data
GROUP BY data.PostingMonth, data.DK_Number
ORDER BY data.PostingMonth;

ただし、出力はすべての dks とすべての月の合計を示し、この値をすべての行に入れています。

誰かが私が間違っていることを教えてもらえますか?

4

2 に答える 2

1

おそらくこれだけで十分です:

SELECT
    PostingMonth,
    DK_Number,
    SUM((Penalty + SellingFare) * IIf(International, 1, 0)) AS IntlAir,
    SUM((Penalty + SellingFare) * IIf(International, 0, 1)) AS DomAir
FROM [data]
GROUP BY PostingMonth, DK_Number

テストデータには...

PostingMonth    DK_Number   International   Penalty SellingFare
------------    ---------   -------------   ------- -----------
1               1           False           $10.00  $100.00
1               1           True            $20.00  $200.00
2               1           False           $30.00  $300.00
1               2           False           $40.00  $400.00
1               2           False           $50.00  $500.00
1               2           True            $60.00  $600.00

...上記のクエリが返す

PostingMonth    DK_Number   IntlAir DomAir
------------    ---------   ------- -------
1               1           $220.00 $110.00
1               2           $660.00 $990.00
2               1           $0.00   $330.00
于 2013-09-13T01:00:01.543 に答える