1

個別の people_id カウントを返したい生データを含むテーブルがあります。カウントのグループが異なる場合、CTE でこれを行うにはどうすればよいですか? これが私がこれまでに持っているものです:

;with cte as 
    (select 
       program_modifier_id, program_modifier, people_id, group_profile_id, 
       current_status, license_number, is_managing_office,
       program_info, program_name, program_code, group_profile_type_id
     From
    #enrollments en with (nolock) )
 SELECT 'TN - Level 4', 
     CASE WHEN (program_modifier_id = 'E1AA7A36-0500-4BAE-A0AA-D9E0BC91A6F3' )
        THEN COUNT(DISTINCT people_id) END AS 'Total Ct' 
 from cte 
 group by program_modifier_id
    UNION

 SELECT 'TN - Level 3 CE - RTC', 
     CASE WHEN (program_modifier_id = '213D080F-E340-44B6-AC8C-4233D1193602' 
                      AND license_number like '%-RTC-%')
        THEN COUNT(DISTINCT people_id) END AS 'Total Ct' 
 from cte 
 group by program_modifier_id, license_number 

これからの出力は次のとおりです。

TN - Level 3 CE - RTC   49
TN - Level 3 CE - RTC   38
TN - Level 4    56
TN - Level 3 CE - RTC   7
TN - Level 3 CE - RTC   24
TN - Level 3 CE - RTC   NULL
TN - Level 4    NULL

しかし、出力を次のようにしたい:

TN - Level 3 CE - RTC   118
TN - Level 4    56

したがって、問題は 2 つあります。まず、これらのカウントの一部には、WHERE 句に複数の条件が含まれています。たとえば、program_modifier_id 対 program_modifier_id および license_number です。2 つ目の問題は、上記の TSQL コードを使用すると、WHERE 句に license_number を含めるために、program_modifier_id と license_number の両方でグループ化する必要があることです。しかし、license_Number のカウントの内訳は望んでいません。license_number に関係なく、合計数が必要です。この TSQL クエリを変更して、必要な数を達成するにはどうすればよいですか?

4

2 に答える 2

1
;with cte as 
    (select 
       program_modifier_id, program_modifier, people_id, group_profile_id, 
       current_status, license_number, is_managing_office,
       program_info, program_name, program_code, group_profile_type_id
     From
    #enrollments en with (nolock) )

 Select Description,SUM([Total Ct]) as [Total Ct] from
 (   
 SELECT 'TN - Level 4' as Description, 
     CASE WHEN (program_modifier_id = 'E1AA7A36-0500-4BAE-A0AA-D9E0BC91A6F3' )
        THEN COUNT(DISTINCT people_id) END AS 'Total Ct' 
 from cte 
 group by program_modifier_id
 ) a Group by Description

 UNION

 Select Description,SUM([Total Ct]) from
 (  
 SELECT 'TN - Level 3 CE - RTC'as Description, 
     CASE WHEN (program_modifier_id = '213D080F-E340-44B6-AC8C-4233D1193602' 
                      AND license_number like '%-RTC-%')
        THEN COUNT(DISTINCT people_id) END AS 'Total Ct' 
 from cte 
 group by program_modifier_id, license_number 
 ) a Group by Description
于 2013-05-09T15:17:41.940 に答える
0

ありがとう。超シンプルになりました!これが私の解決策でした:

;with cte as (
select 
*
From
    #enrollments en with (nolock)
)

SELECT 'TN - Level 4 TOTAL', count(distinct people_id) from #enrollments where program_modifier_id = 'E1AA7A36-0500-4BAE-A0AA-D9E0BC91A6F3' AND group_profile_id in ('3EC657F7-655F-43FB-8424-2A8914E7C725','9D1628F0-CF85-464C-815A-8660AF60978F','D7C59915-067A-4A03-8B8C-23783568C8D3') AND (@Status is NULL OR current_status = @Status)
UNION
SELECT 'TN - Level 4 IH', count(distinct people_id) from #enrollments where program_modifier_id = 'E1AA7A36-0500-4BAE-A0AA-D9E0BC91A6F3' AND group_profile_id = 'D7C59915-067A-4A03-8B8C-23783568C8D3' AND (@Status is NULL OR current_status = @Status)
UNION
SELECT 'TN - Level 4 CIRT', count(distinct people_id) from #enrollments where program_modifier_id = 'E1AA7A36-0500-4BAE-A0AA-D9E0BC91A6F3' AND group_profile_id = '3EC657F7-655F-43FB-8424-2A8914E7C725' AND (@Status is NULL OR current_status = @Status)
于 2013-05-09T15:46:42.293 に答える