我有一个包含原始数据的表,我希望从中返回不同的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
所以问题是双重的。首先,其中一些计数包括WHERE子句中的多个条件。例如,program_modifier_id与program_modifier_id和license_number。第二个问题是使用上面的TSQL代码,我必须通过program_modifier_id和license_number进行分组,以便在WHERE子句中包含license_number。但是我不希望在license_Number上对该计数进行细分。无论license_number如何,我只想要总计数。如何修改此TSQL查询以实现所需的计数?
答案 0 :(得分: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
答案 1 :(得分: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)