2013-07-25 3 views
1

Я хорошо разбираюсь в SQL, но это вне меня. Я смотрю таблицу базы данных, в которой хранятся записи транзакций для универмага. Некоторые транзакции - это покупки, а некоторые - возвраты. Я пытаюсь написать запрос, который будет группировать данные по учетной записи и показывать, сколько покупок сделал владелец учетной записи и сколько возвращается владелец учетной записи.Как вы группируете данные в 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 

Возможно ли это? Спасибо!!!

ответ

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

+0

Спасибо, сэр !!! Это сработало так же, как ваша скрипка! Спасибо Спасибо спасибо!!! –