1
我正在創建一個計劃應用程序,允許員工輸入他們希望的計劃,該計劃存儲在表中。我正在看的當前設計是使用SQL 2008 R2的。用戶可選計劃和使用PIVOT選擇的表設計
CREATE TABLE [dbo].[Schedule] (
[EmpNum] [varchar](10) NOT NULL,
[Start] [datetime] NOT NULL,
[Length] [decimal](18, 2) NOT NULL,
[Reason] [varchar](1) NOT NULL,
CONSTRAINT [PK_Schedule] PRIMARY KEY CLUSTERED
(
[EmpNum] ASC,
[Start] ASC
)
)
有幾件事情需要注意
- 用戶可能輸入沒有時間表的具體日期範圍,還是希望看到他們的名字列出,但沒有時間表
- 用戶可以選擇無一天在一個星期,而是選擇一些其他天
- 開始是轉變的開始
- 長度是一個班次的小時數,可能會隨着每天和每個人的不同而變化
- 原因列是用於已被用戶選擇的內容(W-Work,P-PTO等) )
這裏是樣本數據
EmpNum Start Length Reason
---------- ----------------------- --------------------------------------- ------
000001 2012-08-02 09:00:00.000 12.00 W
000001 2012-08-04 08:00:00.000 9.50 P
000002 2012-08-02 08:30:00.000 10.00 W
000002 2012-08-03 19:00:00.000 12.00 W
000003 2012-08-03 08:00:00.000 8.00 P
我想要的輸出是這樣的
EmpNum [0] [1] [2] [3] [4] [5] [6]
---------- ------ ------ ------ ------ ------ ------ ------
000001 NULL NULL NULL NULL W NULL P
000002 NULL NULL NULL NULL W W NULL
000003 NULL NULL NULL NULL NULL P NULL
因爲我們剛剛從SQL 2000升級,所以我從未使用過PIVOT
查詢,所以請耐心等待。我已經構建了下面的查詢失敗,下面的錯誤,我卡住了。
Msg 102, Level 15, State 1, Line 14
Incorrect syntax near '('.
查詢
declare @FirstDayOfWeek date
set @FirstDayOfWeek = '7/29/2012'
select EmpNum,
@FirstDayOfWeek [0],
dateadd(day, 1, @FirstDayOfWeek) [1],
dateadd(day, 2, @FirstDayOfWeek) [2],
dateadd(day, 3, @FirstDayOfWeek) [3],
dateadd(day, 4, @FirstDayOfWeek) [4],
dateadd(day, 5, @FirstDayOfWeek) [5],
dateadd(day, 6, @FirstDayOfWeek) [6]
from Schedule
pivot (
max(Reason)
for Start in ([0], [1], [2], [3], [4], [5], [6])
) as Pvt
如何最好地實現這個或如何嚴重錯誤我在這裏有什麼想法?
曾任職完美。我相信我明白現在這些工作如何。感謝您的快速幫助。 – Kirk 2012-08-02 18:51:24
當然,很樂意提供幫助。 – Taryn 2012-08-02 18:53:07