2013-07-28 2 views
0

Если вы просмотрите этот SQL Fiddle, вы увидите, что результирующие данные сгруппированы по году и типу, что означает, что для каждого года есть 2 строки. Я хотел бы только группировать в год и отображать сумму A-типа и типа B в той же строке.Группа запросов MySQL с несколькими значениями суммы

Может кто-нибудь скажет мне, как я буду изменять выражения сумм в этом запросе, чтобы первая сумма была только для типа A, а вторая сумма для типа B? Благодарю.

ответ

2

Если вам просто нужны две колонки, это довольно легко сделать;

SELECT Year, 
    SUM(CASE WHEN Type='A' THEN Amt ELSE 0 END) TypeA, 
    SUM(CASE WHEN Type='B' THEN Amt ELSE 0 END) TypeB 
FROM YourTable 
GROUP BY Year 

An SQLfiddle to test with.

... или немного более подробный стандарт SQL;

+0

Большое спасибо. Это именно то, что я искал. Однако я не понимаю синтаксис. Что это значит: Amt * (Type = 'A') ??? Что делает? – DanielAttard

+0

@ DanielAttard Изменен на более читаемый стандартный SQL, первый из них был специфичным для MySQL и более трудным для чтения. –

+0

Удивительный. Я понимаю вербальную версию. Еще раз спасибо. Сделал мою ночь! – DanielAttard

1

Как об этом: http://sqlfiddle.com/#!2/85415/11

SELECT 
    SUM(IF(TYPE = 'A', Amt, 0)) AS A_amt, 
    SUM(IF(TYPE = 'B', Amt, 0)) AS B_amt, 
    YEAR, 
    TYPE 
FROM YourTable 
GROUP BY YEAR 

В качестве альтернативы вы можете использовать CASE заявление, которое является стандартным SQL, но немного больше, так что я выбрал для этой версии.

+0

Спасибо, Вольф. Я узнал кучу с вашего поста. Ценить это. – DanielAttard

Смежные вопросы