2016-04-05 30 views
1

我有像這樣的數據,我想創建矩陣結果像列成列。SQL查詢數據透視表插入列

Seq JobNo  TrnDate  TrnHour 
1 J-000198 2016-04-02 5 
2 J-000198 2016-04-03 4 
3 J-000198 2016-04-04 8 
4 J-000198 2016-04-05 7 
5 J-000198 2016-04-06 2 
6 J-000198 2016-04-07 3 
7 J-000198 2016-04-08 6 

對2016-04-02 TrnDate當天是星期六等等。我希望通過sql查詢得到這樣的結果,並在gridview中填充以供用戶添加/編輯。

Saturday Sunday Monday Tuesday Wednesday Thursday Friday 
02  03  04  05  06  07  08 
5  4  8  7  2   3  6 

這可能嗎?請幫忙。由於

編輯---------

其每個JobNo一整月的條目。它爲每一天創造總和。例如,如果我再添加一行這樣的話,它會爲星期六日期9 + 2 = 11和小時5 + 5 = 10計算總和。我希望它每週都分開。

Seq JobNo  TrnDate  TrnHour 
8 J-000198 2016-04-09 5 

回答

2

試試這個:

SELECT col, [Saturday], [Sunday], [Monday], [Tuesday], 
     [Wednesday], [Thursday], [Friday] 
FROM (
    SELECT JobNo, x.col, x.val, 
     DATENAME(WEEKDAY, TrnDate) AS d 
    FROM mytable 
    CROSS APPLY (
    VALUES ('Hour', TrnHour), 
      ('Day', DATEPART(dd, TrnDate))) x(col, val) 
) AS src 
PIVOT (SUM(val) FOR d IN ([Saturday], [Sunday], [Monday], [Tuesday], 
          [Wednesday], [Thursday], [Friday])) AS pvt 

Demo here

爲了解決不同星期你必須包括用於生成PIVOT的源表中的SELECT子句查詢的週數操作:

SELECT col, w, [Saturday], [Sunday], [Monday], [Tuesday], [Wednesday], [Thursday], [Friday] 
FROM (
    SELECT JobNo, x.col, x.val, 
     DATEPART(WEEK, TrnDate) AS w, 
     DATENAME(WEEKDAY, TrnDate) AS d 
    FROM mytable 
    CROSS APPLY (
    VALUES ('Hour', TrnHour), ('Day', DATEPART(dd, TrnDate))) x(col, val) 
) AS t 
PIVOT (SUM(val) FOR d IN ([Saturday], [Sunday], [Monday], [Tuesday], 
           [Wednesday], [Thursday], [Friday])) AS pvt 
ORDER BY w, col 

Demo here

+0

謝謝你的回覆Giorgos Betsos。我編輯了我的帖子。我有幾行意味着完整的月份行。我想每週保持獨立的結果,但它總結了值 – Raja

+0

@Raja你可以很容易地修改上述查詢,以計算單獨的星期。只需在'src'派生表的'SELECT'子句中添加weeknumber即可。 –

+0

我不能這樣做。我得到像這個日期部分一樣的星期數(dayiff,datediff(day,0,TrnDate)/ 7 * 7)/ 7 + 1,但是不知道如何放入查詢 – Raja

0

你可以這樣做。

SELECT info, [Saturday], [Sunday], [Monday], [Tuesday],[Wednesday],[Thursday], [Friday] 
FROM (
    SELECT 'Total Hour' as info, JobNo, trnHour,DATENAME(WEEKDAY, TrnDate) AS d FROM JobTable 
    union all 
    SELECT 'Date' info,JobNo, datepart(day,TrnDate) as trnHour,DATENAME(WEEKDAY,TrnDate) AS d FROM JobTable 
) AS src 
PIVOT (SUM(trnHour) FOR d IN ([Saturday], [Sunday], [Monday], [Tuesday],[Wednesday], [Thursday], [Friday])) AS pvt 

明智的。

SELECT [week],info, [Saturday], [Sunday], [Monday], [Tuesday],[Wednesday],[Thursday], [Friday] 
FROM (
    SELECT 'Total Hour' as info, JobNo, trnHour,DATENAME(WEEKDAY, TrnDate) AS d,datepart(week,TrnDate) [week] FROM JobTable 
    union all 
    SELECT 'Date' info,JobNo, datepart(day,TrnDate) as trnHour,DATENAME(WEEKDAY,TrnDate) AS d,datepart(week,TrnDate) [week] FROM JobTable 
) AS src 
PIVOT (SUM(trnHour) FOR d IN ([Saturday], [Sunday], [Monday], [Tuesday],[Wednesday], [Thursday], [Friday])) AS pvt 
+0

[星期三]缺少括號。 FYI – smoore4

+0

謝謝,但它顯示了相同的結果@Giorgos – Raja

+0

謝謝@SQLDBA .. – Husen