SQL查询显示列中的列项目?

问题描述:

我有一个数据库表中象下面这样:SQL查询显示列中的列项目?

----------------------------- 
| ID | Item1 | Item2 | Item3| 
----------------------------- 
| 1 | A1 | B3 | C1 | 
| 2 | A2 | B3 | C2 | 
| 3 | A1 | B2 | C2 | 
| 4 | A2 | B1 | C1 | 
----------------------------- 

我想显示其计数表中的项目,如下面:

--------------- 
| item | count| 
--------------- 
| A1 | 2 | 
| A2 | 2 | 
| B1 | 1 | 
| B2 | 1 | 
| B3 | 2 | 
| C1 | 2 | 
| C2 | 2 | 
--------------- 

这可能吗?如果是,查询如何?到目前为止,我只管理一个项目的foreach这样来显示它一个:

------------------ 
| Item1 | Count | 
------------------ 
SELECT COUNT(*) AS `Count` , `Item1` FROM `table` GROUP BY `Item1`; 

------------------ 
| Item2 | Count | 
------------------ 
SELECT COUNT(*) AS `Count` , `Item2` FROM `table` GROUP BY `Item2`; 

------------------ 
| Item3 | Count | 
------------------ 
SELECT COUNT(*) AS `Count` , `Item3` FROM `table` GROUP BY `Item3`; 
+0

首先正常化您的架构 – Strawberry

+0

应该确定@Strawberry。如果他有5个ID#1的项目,他可以有2行,Item1和Item2填入第二个,不是? – Drew

+0

只是在开玩笑Jess,清理架构。如果你想知道如何只是问 – Drew

使用union allgroup by

select item, count(*) 
from ((select item1 as item from `table`) union all 
     (select item2 as item from `table`) union all 
     (select item3 as item from `table`) 
    ) t 
group by item 
order by item; 
+0

谢谢@GordonLinoff –