2014-09-26 3 views
0

Я пытаюсь получить элементы группировки как столбец и счет как элементы строки.SQL Группировка и подсчет вместе

Возможные состояния = IO, НИО, ОТКРЫТО, ЗАКРЫТО, ОТМЕНЕН
Возможные типы = TypeA, TypeB, typeC, типизированных

MyTable (date, status, type, count) 

2014-06-27,OPEN,typeA, 1 
2014-07-01,OPEN,typeA, 1 
2014-07-02,IO,typeB, 2 
2014-07-02,IO,typeC, 3 
2014-07-02,NIO,typeC, 4 

Результат должен выглядеть следующим образом. (Groupping на дату и статус)

date,status,typeA_Count, typeB_Count, typeC_Count, typeD_Count 

2014-06-27,OPEN,1, 0, 0, 0 
2014-07-01,OPEN,1, 0, 0, 0 
2014-07-02,IO, 0, 2, 3, 0 
2014-07-02,NIO, 0, 0, 4, 0 
+0

Какие базы данных вы используете? –

+0

Какой вкус SQL вы используете? – LukeH

+0

@ AllanS.Hansen Я использую Db2 DB ... – Kayser

ответ

3

Простой способ использует CASE/GROUP BY просуммировать значения;

SELECT "date", "status", 
    SUM(CASE WHEN "type"='typeA' THEN "count" ELSE 0 END) typeA_count, 
    SUM(CASE WHEN "type"='typeB' THEN "count" ELSE 0 END) typeB_count, 
    SUM(CASE WHEN "type"='typeC' THEN "count" ELSE 0 END) typeC_count, 
    SUM(CASE WHEN "type"='typeD' THEN "count" ELSE 0 END) typeD_count 
FROM mytable 
GROUP BY "date", "status" 
ORDER BY "date", "status" 

An Oracle SQLfiddle to test with, хотя DB2 должен работать же без проблем.

0

DB2 не поддерживает поэтому пункт PIVOT попробовать это:

select date 
    , status 
    , sum(decode(type,'typeA',count,0)) as count_typeA 
    , sum(decode(type,'typeB',count,0)) as count_typeB 
    , sum(decode(type,'typeC',count,0)) as count_typeC 
    , sum(decode(type,'typeD',count,0)) as count_typeD 
    from mytable 
group by date, status 
Смежные вопросы