1

私は SQL がかなり得意ですが、これは私を超えています。デパートのトランザクション レコードを格納するデータベース テーブルを見ています。一部のトランザクションは購入であり、一部は返品です。アカウントごとにデータをグループ化し、アカウント所有者が行った購入数とアカウント所有者が行った返品数を表示するクエリを作成しようとしています。

以下は、Transaction_Table 内のデータの簡略図です。

Account_Id  Transaction_Code    Transaction_Amt
----------        ----------------   ---------------
123               P                  20.00  
123               P                  30.00
123               R                  10.00

したがって、英語では、Account_Id 123 は合計 50 ドル相当の 2 つの購入 (Transaction_Code が「P」のレコード) を行い、1 回の返品 (Transaction_Code が「R」のレコード) を 10 ドル相当行いました。

次の SQL クエリを作成しました。

SELECT Account_Id, SUM(Transaction_Amt) AS Total_Spent
FROM Transaction_Table 
WHERE Transaction_Code IN (‘P’, ‘R’)
GROUP BY Account_Id
ORDER BY Total_Purchased

クエリを実行すると、次のようになります。

Account_Id     Total_Spent
123            60.00

しかし、私が欲しいのは次のようなものです:

Account_Id     Total_Purchased     Total_Returned
123            50.00               10.00

これは可能ですか?ありがとうございました!!!

4

1 に答える 1

0

SUM()これは一種のピボット クエリで、 の値に基づく必要がありますTransaction_code

SELECT
  Account_Id,
  /* SUM() conditionally based on the Transaction_Code value */
  SUM(CASE WHEN Transaction_Code = 'P' THEN Transaction_Amt ELSE 0 END) AS Total_Purchased,
  SUM(CASE WHEN Transaction_Code = 'R' THEN Transaction_Amt ELSE 0 END) AS Total_Returned
FROM
  Transaction_Table
GROUP BY Account_Id
ORDER BY Total_Purchased

ここにデモがあります: http://sqlfiddle.com/#!2/850b3/1

于 2013-07-25T14:01:45.870 に答える