2014-02-11 16 views
-2

我正在寻找一个解决方案,成为一个漂亮的表,看起来像这样:表在一排多计数

ID | A  | B  | C 
------------------------------- 
1 | 15  | 4  | 3 
2 | 3  | 7  | 1 

的来源是这样的:

ID | Type 
-------------- 
1 | A 
2 | A 
1 | C 
1 | C 
2 | C 
1 | B 
2 | A 
1 | B 

现在我已经计算了每个ID的所有A型和所有B型。

有没有简单的方法?

感谢

+0

考虑处理在表示层/应用级数据显示的问题如果你有这样的代码(例如一个简单的PHP循环作用于一个有序数组)。还要注意的是,在关系数据库中,表格需要具有PRIMARY KEY。 – Strawberry

+5

这个问题似乎是脱离主题,因为它缺乏最小的努力。通过使用您尝试过的代码以及您遇到困难的位置更新您的问题来改善您的问题。 – Kermit

+0

好的,对不起。我不知道如何开始:/ – craCH

回答

6

这种类型的数据转换被称为数据透视。 MySQL不具有旋转功能,但你可以使用聚合函数CASE表达式得到结果:

select id, 
    count(case when type = 'A' then 1 end) A, 
    count(case when type = 'B' then 1 end) B, 
    count(case when type = 'C' then 1 end) C 
from yourtable 
group by id; 

SQL Fiddle with Demo

1

假设你的表名为sometable ...

select ID, 
sum(if(Type="A",1,0)) as A, 
sum(if(Type="B",1,0)) as B, 
sum(if(Type="C",1,0)) as C 
from someTable 
group by ID 

应该做的伎俩。

+0

为什么这会得到downvoted? – TrippyD

+1

我不知道为什么这是downvoted,但我们都得到了一个。这个语法是正确的,它是MySQL特定的。 – Taryn