使用变量列创建sql动态表

时间:2014-05-20 06:59:50

标签: sql

我有一个实际上已经整齐结构的表,但我需要更改输出格式。初始表的格式为

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中模仿数据透视最简单,最直接的方法是什么?

2 个答案:

答案 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