2017-06-29 39 views
0

我有一个表是这样的:计数和组多列

id | opt1 | opt2 | opt3 
1 | valX | valY | valY 
2 | valX | valX | valY 
3 | valY | valZ | valX 

所以我需要准备的数据显示一个饼图,它必须看起来像:

id | valX | valY | valZ 
1 | 1 | 2 | 0 
2 | 2 | 1 | 0 
3 | 1 | 1 | 1 

是什么写入mysql查询的正确方法是什么? 我想我必须首先连接所有列,但接下来的步骤?

+0

你需要这个固定数量的列,还是动态的?如果它是固定的,那么你可以使用控制流功能来做到这一点,https://dev.mysql.com/doc/refman/5.7/en/control-flow-functions.html – CBroe

+0

在这种情况下,它是固定的,工作正常具有控制流程功能。谢谢! – Marco

+0

如果它是动态的,最好的方法是什么? – Marco

回答

0

尝试这个

SELECT ID, 
     CASE WHEN opt1='valX' THEN 1 ELSE 0 END + CASE WHEN opt2='valX' THEN 1 ELSE 0 END + CASE WHEN opt3='valX' THEN 1 ELSE 0 END AS valX, 
     CASE WHEN opt1='valY' THEN 1 ELSE 0 END + CASE WHEN opt2='valY' THEN 1 ELSE 0 END + CASE WHEN opt3='valY' THEN 1 ELSE 0 END As valY, 
     CASE WHEN opt1='valZ' THEN 1 ELSE 0 END + CASE WHEN opt2='valZ' THEN 1 ELSE 0 END + CASE WHEN opt3='valZ' THEN 1 ELSE 0 END As valZ 
FROM TableName 
+0

你刚才错过了逗号 –

+0

更新谢谢@OtoShavadze –

+1

非常棒!非常感谢! – Marco

0

归一化的设计可能是这样的:

id option_id option_value 
1   1 X 
1   2 Y 
1   3 Y 
2   1 X 
2   2 X 
2   3 Y 
3   1 Y 
3   2 Z 
3   3 X 

从这里,你的查询是微不足道的。