2010-09-17 31 views
0

我被要求更改當前顯示一週結束日期,類別和按日期排列的一個星期的小時數據連續查詢。我被要求在行尾顯示註釋字段,我無法弄清楚如何改變查詢來做到這一點。T-SQL Pivot每週顯示一個評論字段

表的結構類似於本

Category Date  Comments  Hours 
test  8/2/2010 myComment  2 
test  8/3/2010     8 
test  8/4/2010     4 
test  8/5/2010     3 
test  8/6/2010     5 

我想要顯示的數據是這樣的。我有一個查詢,將除了評論以外的所有內容。在前端,我只允許每週發表一條評論,並將其添加到表格中的每週/類別組合的星期一日期行。

WeekEnding Category SunHrs MonHrs TuesHrs WedHrs ThuHrs FriHrs SatHrs Comment 
8/7/2010 test  0  1  1  1  1  1  1  myComment 

這是添加註釋字段,它工作正常之前的查詢。

DECLARE @WeekEnding datetime 
DECLARE @UserName nvarchar(245) 

SET @WeekEnding = '09/04/2010' 
SET @UserName = 'brogers' 


SELECT 
    @WeekEnding  WeekEnding 

    ,CategoryID 
    ,isnull([1], 0) SunHrs 
    ,isnull([2], 0) MonHrs 
    ,isnull([3], 0) TueHrs 
    ,isnull([4], 0) WedHrs 
    ,isnull([5], 0) ThuHrs 
    ,isnull([6], 0) FriHrs 
    ,isnull([7], 0) SatHrs 
from (select CategoryID, Datepart(dw, TimeEntryDate) DOW, TimeEntryDuration Hours 
     from dbo.aspnet_starterkits_TimeEntry 
     where TimeEntryDate between dateadd(dd, -6, @WeekEnding) and @WeekEnding) Source 
    pivot (max(Hours) for DOW in ([1],[2],[3],[4],[5],[6],[7])) as pvt 

我不知道如何將註釋字段添加到行的末尾。當我做添加它,我得到這樣

WeekEnding Category SunHrs MonHrs TuesHrs WedHrs ThuHrs FriHrs SatHrs Comment 
8/7/2010 test  0  0  1  1  1  1  0  

8/7/2010 test  0  1  0  0  0  0  0  myComment 

結果我只希望每週末度假/類別組合一行,並在輸出每行一個評論。 這是查詢,我添加了註釋字段並顯示不正確。

任何人都可以指出如何每週顯示一條評論/分類行嗎?

DECLARE @WeekEnding datetime 
DECLARE @UserName nvarchar(245) 

SET @WeekEnding = '09/04/2010' 
SET @UserName = 'brogers' 


SELECT 
    @WeekEnding  WeekEnding 
    ,TimeEntryDescription 
    ,CategoryID 
    ,isnull([1], 0) SunHrs 
    ,isnull([2], 0) MonHrs 
    ,isnull([3], 0) TueHrs 
    ,isnull([4], 0) WedHrs 
    ,isnull([5], 0) ThuHrs 
    ,isnull([6], 0) FriHrs 
    ,isnull([7], 0) SatHrs 
from (select 
     CategoryID, 
     Datepart(dw, TimeEntryDate) DOW, 
     TimeEntryDuration Hours, 
     TimeEntryDescription 
     from dbo.aspnet_starterkits_TimeEntry 
     where TimeEntryDate between dateadd(dd, -6, @WeekEnding) and @WeekEnding) Source 
    pivot (max(Hours) for DOW in ([1],[2],[3],[4],[5],[6],[7])) as pvt 

即使源表具有一週的每一天註釋字段,我只想每星期一個評論每週/類別組合一行。

我將限制輸入爲每週只允許一個(例如星期一),並希望這一個註釋顯示在輸出查詢的行末。

+0

我已經想通了一個「解決」 ......完全相同的註釋添加到一週的每一天,然後它會更容易顯示在一行中。 – 2010-09-17 14:55:05

+0

我的查詢中沒有'on'。 – 2010-09-17 15:09:54

回答

1

這可能是與舊式旋轉

;With [Source] As 
(
select 
     CategoryID, 
     Datepart(dw, TimeEntryDate) DOW, 
     TimeEntryDuration Hours, 
     TimeEntryDescription 
     from dbo.aspnet_starterkits_TimeEntry 
     where TimeEntryDate between dateadd(dd, -6, @WeekEnding) and @WeekEnding 
) 
SELECT 
    @WeekEnding  WeekEnding 
    ,TimeEntryDescription 
    ,CategoryID 
    ,max(case when DOW = 1 then [Hours] else 0 end) SunHrs 
    ,max(case when DOW = 2 then [Hours] else 0 end) MonHrs 
    ,max(case when DOW = 3 then [Hours] else 0 end) TueHrs 
    ,max(case when DOW = 4 then [Hours] else 0 end) WedHrs 
    ,max(case when DOW = 5 then [Hours] else 0 end) ThuHrs 
    ,max(case when DOW = 6 then [Hours] else 0 end) FriHrs 
    ,max(case when DOW = 7 then [Hours] else 0 end) SatHrs 
    ,max(comment) as comment 
from [Source] 
group by 
    TimeEntryDescription 
    ,CategoryID 
+0

我跑了這個,仍然有兩行 – 2010-09-17 15:06:37

+0

你必須在結果中有2個不同的'TimeEntryDescription'或'CategoryID'值。也許你需要'MAX(TimeEntryDescription)'? – 2010-09-17 15:11:44

+0

是的,這是.... MAX工作。謝謝 – 2010-09-17 15:32:28

0

加入數據透視表與日期源表並檢索min(comment)

DECLARE @WeekEnding datetime 
DECLARE @UserName nvarchar(245) 

SET @WeekEnding = '09/04/2010' 
SET @UserName = 'brogers' 

;with Report as (
SELECT 
    @WeekEnding  WeekEnding 
    ,TimeEntryDescription 
    ,CategoryID 
    ,isnull([1], 0) SunHrs 
    ,isnull([2], 0) MonHrs 
    ,isnull([3], 0) TueHrs 
    ,isnull([4], 0) WedHrs 
    ,isnull([5], 0) ThuHrs 
    ,isnull([6], 0) FriHrs 
    ,isnull([7], 0) SatHrs 
from (select 
     CategoryID, 
     Datepart(dw, TimeEntryDate) DOW, 
     TimeEntryDuration Hours, 
     TimeEntryDescription 
     from dbo.aspnet_starterkits_TimeEntry 
     where TimeEntryDate between dateadd(dd, -6, @WeekEnding) and @WeekEnding) Source 
    pivot (max(Hours) for DOW in ([1],[2],[3],[4],[5],[6],[7])) as pvt 
) 
select * 
,(select min(comment) from dbo.aspnet_starterkits_TimeEntry te where TimeEntryDate between dateadd(dd, -6, @WeekEnding) and @WeekEnding)) [Comment] 
from Report r 
+0

謝謝我試過這個,並在關鍵詞'on'附近得到了錯誤的語法。 – 2010-09-17 15:03:14

+0

@Joshua Slocum裏面沒有「開」。 :) – 2010-09-17 15:04:10

+0

謝謝,不知道從哪裏來的......當它運行的時候,評論總是空白。我甚至爲每週的每一天添加了不同的評論,看看哪一天會出現。另外,從dbo.aspnet_starterkits_TimeEntry中選擇min(comment)返回空白。由於我有一個解決方案,這並不是什麼大事,但是當你知道這不是真正的「正確」方法時,這有點令人尷尬。 – 2010-09-17 15:19:23