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 进行了两次购买(Transaction_Code 为“P”的记录),总价值为 50 美元,并进行了一次退货(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 回答