2017-03-21 20 views
0

MS-SQLを使用して週単位の合計をカレンダー形式で表示する必要があります。平日のSQL週合計

SELECT T.WC, T.StDate, T.Product, Count(T.Id) AS [Daily-Total] 
FROM Table T 
WHERE (((T.Completed)=True)) 
GROUP BY T.WC, T.StDate, T.Product 
HAVING (((T.StDate)>=Date()-7 And (T.StDate)<=Date())); 

そして、このようなものを示しています:

WC  StDate  Product Daily-Total 
Finish 01/01/2017 Prod03 4 
Finish 05/01/2017 Prod02 2 
Finish 05/02/2017 Prod02 2 
Robot 01/01/2017 Prod01 4 
Robot 02/01/2017 Prod03 4 
Robot 03/01/2017 Prod02 2 
Robot 03/02/2017 Prod02 2 
Tack 01/01/2017 Prod01 7 
Tack 01/01/2017 Prod02 4 
Tack 01/01/2017 Prod03 4 
Tack 01/01/2017 Prod04 4 

しかし、私の上司、私は簡単にこのようsumarizeするSQLを作成することができます

Id, auto-increment 
WC, text (Departament) 
Product, text 
StDate, date (Stamp Date) 
Completed (T/F) 

:このような表のうち 私にそれをこのように表示したい(実際の数字ではない):

Week10 WC  Prod Monday Tuesday Wensday Thrusday Friday Saturday 
     Tack Prod1  1  0  3  2  0  0 
     Tack Prod2  0  1  0  1  1  0 
     Robot Prod2  3  1  2 ... 
     Finish Prod1  1  4  5 ... 
     Finish Prod3  3  4... 

私はいくつかのネストされたまたはシーケンシャルな選択が必要ですが、いずれかの方法で私は良い解決策を見つけることができません。

誰かがこれを通っているなら、私は助言に感謝します。 ありがとうございます。

+0

検索フアンM.チャパ@ SQL Server' – cha

答えて

0

使用ピボットテーブルの概念:

CREATE TABLE #table (WC VARCHAR(100), StDate DATE , Product VARCHAR(100) 
         , DailyTotal INT , _DayName VARCHAR(50)) 

    INSERT INTO #table (WC , StDate , Product , DailyTotal) 
    SELECT 'Finish','01/01/2017','Prod03', 4 UNION ALL 
    SELECT 'Finish','05/01/2017','Prod02',2 UNION ALL 
    SELECT 'Finish','05/02/2017','Prod02',2 UNION ALL 
    SELECT 'Robot','01/01/2017','Prod01',4 UNION ALL 
    SELECT 'Robot','02/01/2017','Prod03',4 UNION ALL 
    SELECT 'Robot','03/01/2017','Prod02',2 UNION ALL 
    SELECT 'Robot','03/02/2017','Prod02',2 UNION ALL 
    SELECT 'Tack','01/01/2017','Prod01',7 UNION ALL 
    SELECT 'Tack','01/01/2017','Prod02',4 UNION ALL 
    SELECT 'Tack','01/01/2017','Prod03',4 UNION ALL 
    SELECT 'Tack','01/01/2017','Prod04',4 

    UPDATE #table SET _DayName = DATENAME(WEEKDAY,StDate) 

    SELECT * 
    FROM 
    ( 
    SELECT WC , StDate , Product , DailyTotal , _DayName 
    FROM #table 
)A 
    PIVOT 
    (
    SUM(DailyTotal) FOR _DayName IN  
    (Monday,Tuesday,Wednesday,Thursday,Friday,saturday,sunday) 
) AS unpvt 
+0

ため 'PIVOT PIVOTは、それはあなたの結果が得られるかどうかquery.Isの上、お試しください...? – Mansoor

+0

**絶対にしました!**素晴らしいアイデア、ありがとうございました。 私は、使用しているERPにドラッグ&ドロップでピボットテーブルを作成するのに役立つ_dashboard_ユーティリティがあることを最後に発見しました。それはすごくうまくいった、ありがとう@Mansoor。 –

関連する問題