使用sql server 2008将行转换为列?

时间:2010-06-03 11:50:39

标签: sql sql-server-2008

表名是Looupvalue

id Ptypefield Value
1   1   D
2   1   E
3   1   F
4   1   G
5   1   H
6   2   FL
7   2   IF
8   2   VVS1
9   2   VVS2
10  2   VS1
11  2   VS2
12  3   0.50
13  3   1.00
14  3   1.50
15  3   2.00
16  4   Marquise
17  4   Round
18  4   Pear
19  4   Radiant
20  4   Princess

Lookupvalue表值将roow转换为列取决于ptypefield

id  1  id   2      id   3     id   4
1   D   6   fl      12 0.50    16   Marquise  
2   E   7   If      13  1      17    Round....   
3   F   8   vvs2    14  1.5
4   G   9   vvs2     15 2
5   H   10  vs1
        11   vs2 

由于

1 个答案:

答案 0 :(得分:0)

在您的示例输出中,不清楚为什么第1列和第2列的值与第3列和第4列相关。但是,这是一个可能的解决方案:

;With RowNumbers As
    (
    Select Id, PTypeField, Value
        , Row_Number() Over( Partition By PTypeField Order By Id ) As Rownum
    From #Test
    )
Select RowNum
    , Min( Case When PTypeField = 1 Then Id End ) As Id
    , Min( Case When PTypeField = 1 Then Value End ) As [1]
    , Min( Case When PTypeField = 2 Then Id End ) As Id
    , Min( Case When PTypeField = 2 Then Value End ) As [2]
    , Min( Case When PTypeField = 3 Then Id End ) As Id
    , Min( Case When PTypeField = 3 Then Value End ) As [3]
    , Min( Case When PTypeField = 4 Then Id End ) As Id
    , Min( Case When PTypeField = 4 Then Value End ) As [4]
From RowNumbers
Group By RowNum

如果要动态生成列,在SQL中执行此操作的唯一方法是使用一些非常动态的SQL。 T-SQL不是为这种输出而设计的,而是应该使用报告工具或在中间层组件或类中进行交叉绑定。

这个数据模式看起来像一个EAV,可以解释为什么检索你想要的数据是如此困难。