我知道这可以通过枢轴完成,但不知道如何把它放在查询......我的桌子..
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]
答案 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