2009-08-21 16 views
2

このクエリで私の髪を引き出します。多分、ここの専門家の何人かが私が間違っていることを見ることができますか?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 SUMは、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 

を試みました。

答えて

4

ではなく、これを使用します。

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 

マルク・

+0

Marc。君は。はい。 。 Shiz。 - 助けてくれてありがとう。 – Joshua

0

OK]をクリックして、それを考え出しました。 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 
+0

これは確かです - 私の答えを見てください! –