2013-10-02 90 views
2

我需要幫助來創建查詢。H2 - 每天總結

目前,它看起來像這樣

SELECT 
    COUNT(*) AS ALERTS, 
    EXTRACT (YEAR FROM DATE) AS YEAR, 
    EXTRACT (MONTH FROM DATE) AS MONTH, 
    EXTRACT (DAY FROM DATE) AS DAY, 
    HOST, 
    ALERTLEVEL 
FROM 
    ALERTS 
WHERE 
    EXTRACT (DAY FROM DATE) > EXTRACT (DAY FROM CURRENT_DATE) -7 
    AND 
    EXTRACT (MONTH FROM DATE) >= EXTRACT (MONTH FROM CURRENT_DATE) 
    AND 
    HOST = 'HOST' 
GROUP BY 
    YEAR,MONTH,DAY,HOST,ALERTLEVEL 
ORDER BY 
    YEAR ASC,MONTH ASC,DAY ASC, ALERTLEVEL ASC 

結果:

ALERTS  YEAR MONTH DAY  HOST ALERTLEVEL 
5   2013 9  5  HOST 1 
64   2013 9  5  HOST 2 
11   2013 9  5  HOST 3 
15   2013 9  5  HOST 4 
16   2013 9  8  HOST 2 
2   2013 9  9  HOST 1 

我想有4列alertlevel,而不是一個,總結每天柱提醒每個alertlevel 。


期望的結果

YEAR MONTH DAY HOST ALERTLEVEL1 ALERTLEVEL2 ALERTLEVEL3 ALERTLEVEL4 
2013 9  5 HOST 5   64   11   15 
2013 9  8 HOST 0   16   0   0 
2013 9  9 HOST 2   0   0   0 

這是可能的嗎?

非常感謝您的幫助!

回答

4
SELECT 
    COUNT(*) AS ALERTS, 
    EXTRACT (YEAR FROM DATE) AS YEAR, 
    EXTRACT (MONTH FROM DATE) AS MONTH, 
    EXTRACT (DAY FROM DATE) AS DAY, 
    HOST, 
    sum(case when ALERTLEVEL = 1 then 1 else 0 end) as ALERTLEVEL1, 
    sum(case when ALERTLEVEL = 2 then 1 else 0 end) as ALERTLEVEL2, 
    sum(case when ALERTLEVEL = 3 then 1 else 0 end) as ALERTLEVEL3, 
    sum(case when ALERTLEVEL = 4 then 1 else 0 end) as ALERTLEVEL4 
FROM 
    ALERTS 
WHERE 
    EXTRACT (DAY FROM DATE) > EXTRACT (DAY FROM CURRENT_DATE) -7 
    AND 
    EXTRACT (MONTH FROM DATE) >= EXTRACT (MONTH FROM CURRENT_DATE) 
    AND 
    HOST = 'HOST' 
GROUP BY 
    YEAR,MONTH,DAY,HOST 
ORDER BY 
    YEAR ASC,MONTH ASC,DAY ASC 
+0

非常好!是否有任何修改此解決方案的方法可用於N個ALERTLEVEL(s)? – user955732