如何将行转换为列?

时间:2011-03-15 18:26:40

标签: sql

我知道这可以通过枢轴完成,但不知道如何把它放在查询......我的桌子..

Id     Date      Code
1    1-2-2011    Code1
2    2-2-2011    Code2

所需的表格:

Id 1-2-2011  2-2-2011 
1   Code1     Null
2    Null     Code2

这是我正在尝试的东西,但我想知道是否有任何不同的方式..

 SELECT [Id], '1-2-2011','2-2-2011'
 FROM ( SELECT [Id]
               , Code
        FROM @r
    ) p PIVOT ( Code
        FOR [date] IN ('1-2-2011','2-2-2011')
    ) AS pvt
 ORDER BY [Id]

1 个答案:

答案 0 :(得分:1)

正确的PIVOT查询将是这样的

declare @r table (Mobile int, Calldate datetime, Dispo varchar(10))
insert @r select
1, '2011-02-21', 'Code1' union all select
2, '2011-02-22', 'Code2'

SELECT ID, [2011-02-21], [2011-02-22]
-- SELECT *   << or just use this, which includes all columns
FROM (
    SELECT Id, Date, Code
    FROM @r) p
PIVOT (MAX(Code) FOR Date IN ([2011-02-21], [2011-02-22])) AS pvt
ORDER BY ID

您的查询已使用

SELECT [Id], '1-2-2011','2-2-2011'

其中包含两个FIXED-VALUE字符串,这意味着DATA是字符串'1-2-2011',而不是列名。您还需要MAX(Code)或某些聚合函数在旋转时使用。

在SQL Server中进行透视需要您知道advance中的列,您需要在FOR()位中列出这些列。否则,您需要查看dynamic pivoting。无论您使用PIVOT运算符还是使用MAX(CASE模式进行旋转,都是如此。

MAX(CASE)模式

select id,
 MAX(case when date = '2011-02-21' then Code end) "2011-02-21",
 MAX(case when date = '2011-02-22' then Code end) "2011-02-22"
from @r
group by id