SQL Server 2005
スタッフごとに1行のデータを持つように結果セットを圧縮しようとしています。私のクエリは
SELECT Staff +'- '+ CONVERT(CHAR(2),Service_Date, 110) AS Staff
,(SELECT COUNT (Procedure_) WHERE Procedure_ Like '90791%' ) AS '90791'
,(SELECT COUNT (Procedure_) WHERE Procedure_ Like'90832%' ) AS '90832'
,(SELECT COUNT (Procedure_) WHERE Procedure_ Like'90834%' ) AS '90834'
,(SELECT COUNT (Procedure_) WHERE Procedure_ Like'90837%' ) AS '90837'
,(SELECT COUNT (Procedure_) WHERE Procedure_ Like '90847%') AS '90847'
FROM dbo.Service_History
WHERE Program='OPCC'
AND STATUS='Kept'
AND TYPE = 'Client'
AND Procedure_ IS NOT NULL
AND Service_date BETWEEN DATEADD(mm, DATEDIFF(mm, 0,GETDATE())-3, 0) AND GETDATE()
GROUP BY Staff +'- '+ CONVERT(CHAR(2),Service_Date, 110),Procedure_
ORDER BY Staff +'- '+ CONVERT(CHAR(2),Service_Date, 110),Procedure_
GROUP BY Staff +'- '+ CONVERT(CHAR(2),Service_Date, 110),Procedure_
ORDER BY Staff +'- '+ CONVERT(CHAR(2),Service_Date, 110),Procedure_
結果セットは次のとおりです: (譜表ごとに 1 つの行があり、1 つの列のデータが返され、1 つのすべてが NULL の行)。
Staff 90791 90832 90834 90837 90847
Smith, Joe (568)- 04 15 NULL NULL NULL NULL
Smith, Joe (568)- 04 NULL NULL 2 NULL NULL
Smith, Joe (568)- 04 NULL NULL NULL 1 NULL
Smith, Joe (568)- 04 NULL NULL NULL NULL NULL
上記の結果を1行にまとめたいと思います。基本的に、1 か月に 1 人のスタッフにつき 1 行で、実行された手順の数を合計します。
次のように:
Staff 90791 90832 90834 90837 90847
Smith, Joe (568)- 04 15 NULL 2 1 NULL
結果を一時テーブルにインポートし、一時テーブルにクエリを実行して結果を取得することで、目的の結果を得ることができますが、これは効率的ではなく、より良い解決策があることを願っています。