2015-03-08 5 views
1

Моего стола выглядит, как показано ниже,как сгруппировать несколько столбцов в SQL

ID EMP_ID AMOUNT MODE 
1 E01  1000 CASH 
2 E01  2000 CASH 
3 E01  3000 DD 
4 E01  1000 DD 
5 E02  1500 CASH 
6 E02  2000 DD 

Я хочу, чтобы подвести общую сумму, уплаченную каждую Emp, а также сумму суммы, уплаченные на основании режима. Например, я хочу, чтобы результат был «7000» как totalAmount, «3000» в качестве наличных денег, «4000» в качестве DD для E01.

Я попробовал следующий запрос, но не смог получить вышеуказанный результат.

select sum(AMOUNT) as totalAmount from fees where EMP_ID = 'E01' group by mop 

Может кто-нибудь предложить запрос, чтобы получить вышеуказанный результат?

EDIT:

Я хочу результирующую таблицу, как показано ниже,

ID EMP_ID TOTAL_AMOUNT CASH_AMOUNT  DD_AMOUNT 
    1 E01  7000   3000   4000 
    2 E02  3500   1500   2000 
+0

Используете ли вы MySQL и SQL Server? (Если нет, отметьте те, которые не используются.) – jarlh

+0

Покажите нам желаемый результат (используя уже предоставленные данные sampe). – jarlh

+0

Я использую mysql – Jugi

ответ

2

Использование кейса для SUM cash/dd:

select EMP_ID, 
     sum(AMOUNT) as totalAmount, 
     sum(case when MODE = 'CASH' then AMOUNT else 0 end) as CASH_AMOUNT, 
     sum(case when MODE = 'DD' then AMOUNT else 0 end) as DD_AMOUNT 
from fees 
group by EMP_ID 
1

Используйте функцию SUM в сочетании с функцией IF:

SELECT EMP_ID, 
      SUM(amount) AS TOTA_AMOUNT, 
      SUM(IF(`mode` = 'CASH', amount, 0)) AS CASH_AMOUNT, 
      SUM(IF(`mode` = 'DD', amount, 0)) AS DD_AMOUNT 
    FROM fees 
GROUP BY emp_id 

SQL Fiddle: http://www.sqlfiddle.com/#!9/94a55/1

+0

Большое спасибо jordi .. Это то, что я ищу. Отлично !! – Jugi