1

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

結果を一時テーブルにインポートし、一時テーブルにクエリを実行して結果を取得することで、目的の結果を得ることができますが、これは効率的ではなく、より良い解決策があることを願っています。

4

2 に答える 2

0

次のようにします。

select staff + convert(char(2),service_date,110) staff,
count(case when procedure like '90791%' then staff end) '90791',
count(case when procedure like '90832%' then staff end) '90832',
count(case when procedure like '90834%' then staff end) '90834',
count(case when procedure like '90837%' then staff end) '90837',
count(case when procedure like '90847%' then staff end) '90847'

from service_history
where program='OPCC'
 ....
group by staff + convert(char(2),service_date,110)

それはそれを行う必要があります!

于 2013-07-19T20:56:06.973 に答える