2012-08-02 54 views
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 

如何最好地實現這個或如何嚴重錯誤我在這裏有什麼想法?

回答

2

它看起來像你試圖根據1-7周的日子將你的數據轉移。我建議這個輕微的變化,以得到它的工作:

SELECT * 
FROM 
(
    select EmpNum, 
     reason, 
     datepart(dw, start) as DyOfWk 
    from #Schedule 
) s 
pivot (
    max(Reason) 
    for dyofwk in ([1], [2], [3], [4], [5], [6], [7]) 
) as Pvt 

SQL Fiddle with Demo

結果:

enter image description here

+0

曾任職完美。我相信我明白現在這些工作如何。感謝您的快速幫助。 – Kirk 2012-08-02 18:51:24

+0

當然,很樂意提供幫助。 – Taryn 2012-08-02 18:53:07