我有一个实际上已经整齐结构的表,但我需要更改输出格式。初始表的格式为
Class Type Value
c1 t1 1
c2 t1 2
c3
c1 t2 3
c2 t2 2
c3 t2 5
c2 t3 1
c3 t4 6
c1 t1 9
c2 t1 2
我需要动态创建一个表,该表具有不同的类作为行,类型作为列并对值进行求和。类型不固定,所以我无法构建静态表。如何动态创建一个看起来像
的表class t1 t2 t3 t4
c1 10 3 0 0
c2 4 2 1 0
c3 0 5 0 6
有没有办法用sql轻松地做到这一点?
当我指向pivot时,我只是想了解mysql不支持这个。在sql中模仿数据透视最简单,最直接的方法是什么?
答案 0 :(得分:1)
如果数字类型固定为4(t1,t2,t3和t4)。我们可以在没有PIVOT
的情况下执行此操作:
试试这个:
SELECT class,
COALESCE(SUM(CASE WHEN Type='t1' THEN Value END),0) AS t1,
COALESCE(SUM(CASE WHEN Type='t2' THEN Value END),0) AS t2,
COALESCE(SUM(CASE WHEN Type='t3' THEN Value END),0) AS t3,
COALESCE(SUM(CASE WHEN Type='t4' THEN Value END),0) AS t4
FROM TableName
GROUP BY class
结果:
CLASS T1 T2 T3 T4
c1 10 3 0 0
c2 4 2 1 0
c3 0 5 0 6
请参阅SQL Fiddle中的结果。
答案 1 :(得分:1)
如果 4种类型(即t1,t2,t3,t4)仅,请尝试 案例 建筑,类似的东西:
select class,
sum(case
when Type = 't1' then
value
else
0
end) as t1,
sum(case
when Type = 't2' then
value
else
0
end) as t2,
sum(case
when Type = 't3' then
value
else
0
end) as t3,
sum(case
when Type = 't4' then
value
else
0
end) as t4
from MyTable
group by class
一般情况下(如果t1..tn未修复),您必须 pivot