2012-09-07 62 views
4

我有一個表SQL計數這是一個代碼

ANSWERS 
    qId 
    toggle_value 

它記錄的HTML單選按鈕值{Yes, N/A, No, Resolved}

現在我想算和總結多少yeses,NOS,NAS和按問題ID分組。

爲了簡單起見,我開始構建每個單獨的查詢。

SELECT qId, count(*) as yes_qty FROM ANSWERS WHERE TOGGLE_VALUE='Yes' GROUP BY qId; 
SELECT qId, count(*) as na_qty FROM ANSWERS WHERE TOGGLE_VALUE='NA' GROUP BY qId; 
SELECT qId, count(*) as no_qty FROM ANSWERS WHERE TOGGLE_VALUE='No' GROUP BY qId; 
SELECT qId, count(*) as resolved_qty FROM ANSWERS WHERE TOGGLE_VALUE='Resolved' GROUP BY qId; 

但我真的想在一個查詢,所以我可以遍歷列表,並顯示這樣的事情(合計14個清單3題)

Q  Yes  No  NA  Resolved 
1  4  10  0  10 
2  14  0  0   0 
3  7  0  7   0 

我不實際使用的字符串觸發值,但數字1 =是,2 = NA,等等,並想知道如果有更好的表設計本來

ANSWERS 
    qId 
    yes_value 
    no_value 
    na_value 
    resolved_value 

我不得不重構很多其他的事情,如果我改變了表設計,所以我希望得到一個單一的查詢工作。

+0

我很高興我的桌子設計很好,因爲如果我改變它,它會對onther代碼產生連鎖反應。我選擇了似乎最容易閱讀的答案。 – jeff

回答

5
SELECT qId, 
     SUM(CASE WHEN TOGGLE_VALUE='Yes' THEN 1 ELSE 0 END) AS YesQty, 
     SUM(CASE WHEN TOGGLE_VALUE='No' THEN 1 ELSE 0 END) AS NoQty, 
     SUM(CASE WHEN TOGGLE_VALUE='NA' THEN 1 ELSE 0 END) AS NAQty, 
     SUM(CASE WHEN TOGGLE_VALUE='Resolved' THEN 1 ELSE 0 END) AS ResolvedQty 
    FROM ANSWERS 
GROUP BY qId 
+0

+1尼汀,我是一個很好的寬鬆:) –

1

我喜歡你的餐桌設計。我會親自用SUMGROUP BY解決這個問題,並使用CASE子句創建新列。

+0

(好吧,尼廷更快地發佈答案...) –

+0

+1永遠不要在意,你的答案在概念上也是正確的...想法是幫助其他什麼所以我們有很少的知識...... –

相關問題