在sqlserver中进行透视

时间:2011-06-01 15:01:54

标签: sql sql-server-2008 pivot

如何根据“Col1”中的值转换格式表 让初始表格内容为

Col1    Col2    Cnt     color
----------------------------
1       1       5       green
1       2       0       blue
1       3       7       red
2       1       0       gray
2       2       10      yellow
2       3       8       orange

INTO以下格式的表格

c11  d11  e11  color11  c12  d12 e12  color12  c13  d13 e13 color13
------------------------------------------- -----------------------
1    1    5  green       1   2    0    blue     1   3    7   red
2    1    0  gray        2   2    10   yellow   2   3    8   orange

该查询用于生成报告的数据集。其中我绘制了每个x,y坐标的气泡图。

“c11 d11 e11 c12 d12 e12 c13 d13 e13”是新数据集中的列名。由于列可以动态变化,我已经引用了这种方式。

我使用颜色绘制每个气泡值的颜色

有人可以帮忙查询一下吗?

1 个答案:

答案 0 :(得分:0)

我认为PIVOT解决方案不是你真正追求的。相反,您可以执行以下操作

WITH TestData AS
(
SELECT 1 Col1, 1 Col2, 5 Cnt, 'green' color
UNION SELECT 1 , 2 , 0 Cnt, 'blue'
UNION SELECT 1 , 3 , 7 Cnt, 'red'
UNION SELECT 2 , 1 , 0 Cnt, 'gray'
UNION SELECT 2 , 2 , 10 Cnt, 'yellow'
UNION SELECT 2 , 3 , 8 Cnt, 'orange'

)
SELECT 
    t1.col1 c11 , 
    t1.col2 d11 ,
    t1.cnt e11,
    t1.color  color11,
    t2.col1 c12   , 
    t2.col2 d12 ,
    t2.cnt e12,
    t2.color  color12  ,
    t3.col1 c13 , 
    t3.col2 d13 ,
    t3.cnt e13,
    t3.color  color13


FROM 
    TestData t1
    inner join TestData t2 
    ON t1.Col1 = t2.Col1 
    inner join TestData t3 
    ON t1.Col1 = t3.Col1 
where t1.Col2 = 1
    and t2.Col2 = 2
    and t3.Col2 = 3

哪个输出

c11 d11 e11 color11 c12 d12 e12 color12 c13 d13 e13 color13
--- --- --- ------- --- --- --- ------- --- --- --- -------
1   1   5   green   1   2   0   blue    1   3   7   red
2   1   0   gray    2   2   10  yellow  2   3   8   orange

(2 row(s) affected)

我的猜测是你可能需要在你的解决方案中动态生成这个sql而不是我的静态解决方案。