1

SUM を使用したこのサブクエリに問題があります。クエリは、特定の日付範囲からの複数のレコードの利益列を合計します。この総利益を、レコードに添付された口座番号でグループ化しています。口座番号が 1 つの場合は、問題なく機能します。

select
    [ACCOUNT ID],
    (
     select SUM(PROFIT)
     from [Transaction Table]
     where [ACCOUNT ID] in ('1001')
     and [ACTIVITY DATE] in ('5/31/2012')
    ) as 'May Profit'

from
    [Transaction Table]

where
    [ACCOUNT ID] in ('1001')

group by
    [ACCOUNT ID]    

正しい結果が得られます:

    | ACCOUNT ID | May Profit |
    ---------------------------
    |    1001    |   $61.97   |

問題は、複数のアカウント番号で発生します。

select
    [ACCOUNT ID],
    (
     select SUM(PROFIT)
     from [Transaction Table]
     where [ACCOUNT ID] in ('1001','2001')
     and [ACTIVITY DATE] in ('5/31/2012')
    ) as 'May Profit'

from
    [Transaction Table]

where
    [ACCOUNT ID] in ('1001','2001')

group by
    [ACCOUNT ID]    

間違った結果が得られます:

    | ACCOUNT ID | May Profit |
    ---------------------------
    |    1001    |  $127.34   |
    |    2001    |  $127.34   |

「5 月の利益」は、各レコードの両方のアカウントで合計されています。口座番号ごとの個々の利益合計が必要です。

何かご意見は?前もって感謝します!

4

2 に答える 2

2

サブクエリを使用する必要はありません

 select
     [ACCOUNT ID],
     SUM(PROFIT)
 from [Transaction Table]
 where [ACCOUNT ID] in ('1001','2001') and [ACTIVITY DATE] in ('5/31/2012')
 group by [ACCOUNT ID]

クエリは 2 つのアカウントの合計をカウントし、各行に表示しました


アップデート:

実際、複数の合計の場合、私はこのようなことをします

 select
     [ACCOUNT ID],
     SUM(case when [ACTIVITY DATE] in ('5/31/2012') then PROFIT else 0 end) as 'May Profit',
     SUM(case when [ACTIVITY DATE] in ('4/31/2012') then PROFIT else 0 end) as 'April Profit'
 from [Transaction Table]
 where [ACCOUNT ID] in ('1001','2001') and 
 group by [ACCOUNT ID]
于 2012-11-29T17:14:45.197 に答える
0

サブクエリを使用する必要はありませんが、次の 2 つの方法で実行できます。

クエリを使用する最初の方法 (推奨されません) - Account Id = T.Account Id に注意してください。

select
    [ACCOUNT ID],
    (
     select SUM(PROFIT)
     from [Transaction Table]
     where [ACCOUNT ID] = T.[ACCOUNT ID]
     and [ACTIVITY DATE] in ('5/31/2012')
    ) as 'May Profit'
from
    [Transaction Table] T
where
    [ACCOUNT ID] in ('1001','2001')
group by
    [ACCOUNT ID]  

より良い方法:

select
     [ACCOUNT ID],
     SUM(PROFIT)
from [Transaction Table]
where [ACCOUNT ID] in ('1001','2001') and [ACTIVITY DATE] in ('5/31/2012')
group by [ACCOUNT ID]
于 2012-11-29T17:17:29.207 に答える