2016-04-05 5 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ため

その完全な月のエントリを編集しました。それは毎日のための合計を作る。たとえば、このような行をもう1つ追加すると、土曜日の日付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

私はこれを行うことができませんでした。私はこのdatepart(day、dateiff(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

[Wednesday]に括弧がありません。 FYI – smoore4

+0

ありがとうございますが、@Giorgosと同じ結果を表示しています – Raja

+0

ありがとう@SQLDBA .. – Husen