SQL Server 2005中的PIVOT语法

用这个查询拉出我的头发。也许这里的一些专家可以看到我做错了什么?SQL Server 2005中的PIVOT语法

我有一个TimeSheetTime表如下:

CREATE TABLE TimeSheetTime(

TimeSheetTimeID int IDENTITY(1,1) NOT NULL,

TimeSheetItemID int NOT NULL,

OffsetToEntryDate tinyint NOT NULL,

Hours float NOT NULL

)

这是填充了一些数据如下:

INSERT TimeSheetTime (TimeSheetItemID, OffsetToEntryDate, Hours) 

SELECT 1,1,7

UNION SELECT 1,3,1.5

UNION SELECT 1,0,1

UNION SELECT 2,1,0

UNION SELECT 2,4,0

UNION SELECT 2,3,0

UNION SELECT 3,2,0

UNION SELECT 3,4,1

UNION SELECT 3,5,2

UNION SELECT 3,1,2

UNION SELECT 3,2,4

UNION SELECT 4,3,5

UNION SELECT 4,5,16

UNION SELECT 4,2,1

UNION SELECT 5,3,0.5

UNION SELECT 5,4,1

UNION SELECT 5,3,1

UNION SELECT 5,4,4

UNION SELECT 6,5,4

UNION SELECT 6,1,0.5

UNION SELECT 6,2,3.2

UNION SELECT 7,3,0.2

UNION SELECT 7,5,1.5

UNION SELECT 7,1,0.1

UNION SELECT 8,3,0.4

UNION SELECT 8,5,0.5

UNION SELECT 8,1,0.3

UNION SELECT 8,3,1

UNION SELECT 9,5,2

UNION SELECT 9,3,0.5

现在,我想返回拥有TimeSheetItemID数据集随后小时的PIVOT总和,排列在OffsetToEntryDate的列中。 ie:

TimeSheetItemID | 0 | 1 | 2 | 3 | 4 | 5 | 6

我尝试以下

SELECT * 

FROM TimeSheetTime

pivot

(

SUM(Hours)

FOR OffSetToEntryDate

IN (0,1,2,3,4,5,6)

) as TST

任何建议都理解的。

回答:

使用这个代替:

SELECT * 

FROM TimeSheetTime

pivot

(

SUM(Hours)

FOR OffSetToEntryDate

IN ([0],[1],[2],[3],[4],[5],[6])

) as TST

你想在你的数据透视表使用的列必须投入方括号[ ... ]

获取这些结果:

TimeSheetTimeID TimeSheetItemID 0 1 2 3 4 5 6 

1 1 1 NULL NULL NULL NULL NULL NULL

2 1 NULL 7 NULL NULL NULL NULL NULL

3 1 NULL NULL NULL 1.5 NULL NULL NULL

4 2 NULL 0 NULL NULL NULL NULL NULL

5 2 NULL NULL NULL 0 NULL NULL NULL

6 2 NULL NULL NULL NULL 0 NULL NULL

7 3 NULL 2 NULL NULL NULL NULL NULL

8 3 NULL NULL 0 NULL NULL NULL NULL

9 3 NULL NULL 4 NULL NULL NULL NULL

10 3 NULL NULL NULL NULL 1 NULL NULL

11 3 NULL NULL NULL NULL NULL 2 NULL

12 4 NULL NULL 1 NULL NULL NULL NULL

13 4 NULL NULL NULL 5 NULL NULL NULL

14 4 NULL NULL NULL NULL NULL 16 NULL

15 5 NULL NULL NULL 0.5 NULL NULL NULL

16 5 NULL NULL NULL 1 NULL NULL NULL

17 5 NULL NULL NULL NULL 1 NULL NULL

18 5 NULL NULL NULL NULL 4 NULL NULL

19 6 NULL 0.5 NULL NULL NULL NULL NULL

20 6 NULL NULL 3.2 NULL NULL NULL NULL

21 6 NULL NULL NULL NULL NULL 4 NULL

22 7 NULL 0.1 NULL NULL NULL NULL NULL

23 7 NULL NULL NULL 0.2 NULL NULL NULL

24 7 NULL NULL NULL NULL NULL 1.5 NULL

25 8 NULL 0.3 NULL NULL NULL NULL NULL

26 8 NULL NULL NULL 0.4 NULL NULL NULL

27 8 NULL NULL NULL 1 NULL NULL NULL

28 8 NULL NULL NULL NULL NULL 0.5 NULL

29 9 NULL NULL NULL 0.5 NULL NULL NULL

30 9 NULL NULL NULL NULL NULL 2 NULL

马克

回答:

好了,想通了。似乎PIVOT不能在数字类型字段值上完成。以下运作良好。现在我只需要弄清楚如何使它在我的应用程序中工作。

DECLARE @TimeSheetTime TABLE (

TimeSheetItemID int NOT NULL,

OffsetToEntryDate varchar(4) NOT NULL,

Hours float NOT NULL

)

INSERT @TimeSheetTime (TimeSheetItemID, OffsetToEntryDate, Hours)

SELECT 1,'a1',7

UNION SELECT 1,'a3',1.5

UNION SELECT 1,'a0',1

UNION SELECT 2,'a1',0

UNION SELECT 2,'a4',0

UNION SELECT 2,'a3',0

UNION SELECT 3,'a2',0

UNION SELECT 3,'a4',1

UNION SELECT 3,'a5',2

UNION SELECT 3,'a1',2

UNION SELECT 3,'a2',4

UNION SELECT 4,'a3',5

UNION SELECT 4,'a5',16

UNION SELECT 4,'a2',1

UNION SELECT 5,'a3',0.5

UNION SELECT 5,'a4',1

UNION SELECT 5,'a3',1

UNION SELECT 5,'a4',4

UNION SELECT 6,'a5',4

UNION SELECT 6,'a1',0.5

UNION SELECT 6,'a2',3.2

UNION SELECT 7,'a3',0.2

UNION SELECT 7,'a5',1.5

UNION SELECT 7,'a1',0.1

UNION SELECT 8,'a3',0.4

UNION SELECT 8,'a5',0.5

UNION SELECT 8,'a1',0.3

UNION SELECT 8,'a3',1

UNION SELECT 9,'a5',2

UNION SELECT 9,'a3',0.5

SELECT * FROM @TimeSheetTime

PIVOT (

SUM(Hours)

FOR OffsetToEntryDate

IN (a0,a1,a2,a3,a4,a5,a6)

) AS p

以上是 SQL Server 2005中的PIVOT语法 的全部内容, 来源链接: utcz.com/qa/257170.html

回到顶部