2012-09-07 27 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永远不要在意,你的答案在概念上也是正确的...想法是帮助其他什么所以我们有很少的知识...... –

相关问题