掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
SQLについて (ID:83426)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
例えば・・・ WorkDate DateTime Worker int Amount int のテーブル構造としてテストデータを登録し・・・ テーブル名は、TESTとします。 力技のSQLですが・・・ SELECT Worker, Q0,Q1,Q2,Q3,Q4,Q5,Q6,Q7,Q8,Q9,Q10,Q11,Q12,Q13,Q14,Q15,Q16,Q17,Q18 FROM ( SELECT Worker, SUM(CASE convert(datetime,str(datepart(yyyy,P.WorkDate))+'/'+str(datepart(mm,P.WorkDate))+'/01') WHEN convert(datetime,str(datepart(yyyy,DateAdd(mm,0,GETDATE())))+'/'+str(datepart(mm,DateAdd(mm,0,GETDATE())))+'/01') THEN P.Money ELSE 0 END) AS Q0, SUM(CASE convert(datetime,str(datepart(yyyy,P.WorkDate))+'/'+str(datepart(mm,P.WorkDate))+'/01') WHEN convert(datetime,str(datepart(yyyy,DateAdd(mm,-1,GETDATE())))+'/'+str(datepart(mm,DateAdd(mm,-1,GETDATE())))+'/01') THEN P.Money ELSE 0 END) AS Q1, SUM(CASE convert(datetime,str(datepart(yyyy,P.WorkDate))+'/'+str(datepart(mm,P.WorkDate))+'/01') WHEN convert(datetime,str(datepart(yyyy,DateAdd(mm,-2,GETDATE())))+'/'+str(datepart(mm,DateAdd(mm,-2,GETDATE())))+'/01') THEN P.Money ELSE 0 END) AS Q2, SUM(CASE convert(datetime,str(datepart(yyyy,P.WorkDate))+'/'+str(datepart(mm,P.WorkDate))+'/01') WHEN convert(datetime,str(datepart(yyyy,DateAdd(mm,-3,GETDATE())))+'/'+str(datepart(mm,DateAdd(mm,-3,GETDATE())))+'/01') THEN P.Money ELSE 0 END) AS Q3, SUM(CASE convert(datetime,str(datepart(yyyy,P.WorkDate))+'/'+str(datepart(mm,P.WorkDate))+'/01') WHEN convert(datetime,str(datepart(yyyy,DateAdd(mm,-4,GETDATE())))+'/'+str(datepart(mm,DateAdd(mm,-4,GETDATE())))+'/01') THEN P.Money ELSE 0 END) AS Q4, SUM(CASE convert(datetime,str(datepart(yyyy,P.WorkDate))+'/'+str(datepart(mm,P.WorkDate))+'/01') WHEN convert(datetime,str(datepart(yyyy,DateAdd(mm,-5,GETDATE())))+'/'+str(datepart(mm,DateAdd(mm,-5,GETDATE())))+'/01') THEN P.Money ELSE 0 END) AS Q5, SUM(CASE convert(datetime,str(datepart(yyyy,P.WorkDate))+'/'+str(datepart(mm,P.WorkDate))+'/01') WHEN convert(datetime,str(datepart(yyyy,DateAdd(mm,-6,GETDATE())))+'/'+str(datepart(mm,DateAdd(mm,-6,GETDATE())))+'/01') THEN P.Money ELSE 0 END) AS Q6, SUM(CASE convert(datetime,str(datepart(yyyy,P.WorkDate))+'/'+str(datepart(mm,P.WorkDate))+'/01') WHEN convert(datetime,str(datepart(yyyy,DateAdd(mm,-7,GETDATE())))+'/'+str(datepart(mm,DateAdd(mm,-7,GETDATE())))+'/01') THEN P.Money ELSE 0 END) AS Q7, SUM(CASE convert(datetime,str(datepart(yyyy,P.WorkDate))+'/'+str(datepart(mm,P.WorkDate))+'/01') WHEN convert(datetime,str(datepart(yyyy,DateAdd(mm,-8,GETDATE())))+'/'+str(datepart(mm,DateAdd(mm,-8,GETDATE())))+'/01') THEN P.Money ELSE 0 END) AS Q8, SUM(CASE convert(datetime,str(datepart(yyyy,P.WorkDate))+'/'+str(datepart(mm,P.WorkDate))+'/01') WHEN convert(datetime,str(datepart(yyyy,DateAdd(mm,-9,GETDATE())))+'/'+str(datepart(mm,DateAdd(mm,-9,GETDATE())))+'/01') THEN P.Money ELSE 0 END) AS Q9, SUM(CASE convert(datetime,str(datepart(yyyy,P.WorkDate))+'/'+str(datepart(mm,P.WorkDate))+'/01') WHEN convert(datetime,str(datepart(yyyy,DateAdd(mm,-10,GETDATE())))+'/'+str(datepart(mm,DateAdd(mm,-10,GETDATE())))+'/01') THEN P.Money ELSE 0 END) AS Q10, SUM(CASE convert(datetime,str(datepart(yyyy,P.WorkDate))+'/'+str(datepart(mm,P.WorkDate))+'/01') WHEN convert(datetime,str(datepart(yyyy,DateAdd(mm,-11,GETDATE())))+'/'+str(datepart(mm,DateAdd(mm,-11,GETDATE())))+'/01') THEN P.Money ELSE 0 END) AS Q11, SUM(CASE convert(datetime,str(datepart(yyyy,P.WorkDate))+'/'+str(datepart(mm,P.WorkDate))+'/01') WHEN convert(datetime,str(datepart(yyyy,DateAdd(mm,-12,GETDATE())))+'/'+str(datepart(mm,DateAdd(mm,-12,GETDATE())))+'/01') THEN P.Money ELSE 0 END) AS Q12, SUM(CASE convert(datetime,str(datepart(yyyy,P.WorkDate))+'/'+str(datepart(mm,P.WorkDate))+'/01') WHEN convert(datetime,str(datepart(yyyy,DateAdd(mm,-13,GETDATE())))+'/'+str(datepart(mm,DateAdd(mm,-13,GETDATE())))+'/01') THEN P.Money ELSE 0 END) AS Q13, SUM(CASE convert(datetime,str(datepart(yyyy,P.WorkDate))+'/'+str(datepart(mm,P.WorkDate))+'/01') WHEN convert(datetime,str(datepart(yyyy,DateAdd(mm,-14,GETDATE())))+'/'+str(datepart(mm,DateAdd(mm,-14,GETDATE())))+'/01') THEN P.Money ELSE 0 END) AS Q14, SUM(CASE convert(datetime,str(datepart(yyyy,P.WorkDate))+'/'+str(datepart(mm,P.WorkDate))+'/01') WHEN convert(datetime,str(datepart(yyyy,DateAdd(mm,-15,GETDATE())))+'/'+str(datepart(mm,DateAdd(mm,-15,GETDATE())))+'/01') THEN P.Money ELSE 0 END) AS Q15, SUM(CASE convert(datetime,str(datepart(yyyy,P.WorkDate))+'/'+str(datepart(mm,P.WorkDate))+'/01') WHEN convert(datetime,str(datepart(yyyy,DateAdd(mm,-16,GETDATE())))+'/'+str(datepart(mm,DateAdd(mm,-16,GETDATE())))+'/01') THEN P.Money ELSE 0 END) AS Q16, SUM(CASE convert(datetime,str(datepart(yyyy,P.WorkDate))+'/'+str(datepart(mm,P.WorkDate))+'/01') WHEN convert(datetime,str(datepart(yyyy,DateAdd(mm,-17,GETDATE())))+'/'+str(datepart(mm,DateAdd(mm,-17,GETDATE())))+'/01') THEN P.Money ELSE 0 END) AS Q17, SUM(CASE convert(datetime,str(datepart(yyyy,P.WorkDate))+'/'+str(datepart(mm,P.WorkDate))+'/01') WHEN convert(datetime,str(datepart(yyyy,DateAdd(mm,-18,GETDATE())))+'/'+str(datepart(mm,DateAdd(mm,-18,GETDATE())))+'/01') THEN P.Money ELSE 0 END) AS Q18 FROM TEST AS P GROUP BY P.Worker ) AS P1 で、得られます。 SQL Server 2000 なら、ストアドプロシージャとか、ビューとかを 駆使した方が、キレイにできますが・・・ まぁ〜できると言うことで・・・ ※ どっか、間違っていますかネ〜 以上。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.