多个值上的SQL百分比

多个值上的SQL百分比,sql,sql-server-2008,variables,percentage,Sql,Sql Server 2008,Variables,Percentage,我对此感到迷茫,我有4个专栏: 市场、计数、分配、注册 我需要得到退学和入学之间的百分比,但是它们是基于一列状态,我做了两个单独的案例陈述,以便将其分开 我不知道如何计算像这样设置的查询的百分比,但我也不知道如何让列以另一种方式分开,任何帮助都将不胜感激 我已经包括了这个问题 use medicare_enrollment ---Variable set to find the first of the current reporting year Declare @1stofYear as D

我对此感到迷茫,我有4个专栏:

市场、计数、分配、注册

我需要得到退学和入学之间的百分比,但是它们是基于一列状态,我做了两个单独的案例陈述,以便将其分开

我不知道如何计算像这样设置的查询的百分比,但我也不知道如何让列以另一种方式分开,任何帮助都将不胜感激

我已经包括了这个问题

use medicare_enrollment
---Variable set to find the first of the current reporting year
Declare @1stofYear as Date
set @1stofYear = DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()), 0)


---Variable set to find the end of most recent quarter
Declare @endofqrtr as date
set @endofqrtr = convert(varchar,DATEADD(MONTH,DATEDIFF(MONTH,0,getdate()),-1),101)


 SELECT     MARKET
         , COUNT(MARKET) AS COUNT ,Disenrollment,Enrollment     
from (SELECT DISTINCT 
                      MBR_FIRST_NAME, MBR_LAST_NAME, MBR_DOB, MBR_MEDICARE_ID, MBR_COV_EFF_DATE, MBR_COV_END_DATE, MBR_ADMIN_DIV_CD AS MARKET, 
                      CI_GRP_ID, MBR_STATUS_CD, COUNT(MBR_STATUS_CD) AS count, 
                      CASE WHEN MBR_STATUS_CD = 'I' THEN 'Disenrollment' End as Disenrollment, Case WHEN MBR_STATUS_CD = 'A' THEN 'Enrollment' END AS Enrollment
FROM         VW_CI_Snapshot_Today AS c
WHERE     (NOT (PROD_TYPE_CODE = 'MCD')) AND (MBR_STATUS_CD IN ('I', 'A')) AND (MBR_ADMIN_DIV_CD IN ('CT', 'IA', 'IL', 'MA', 'ME', 'MI', 'MN', 'MT', 'ND', 'NE', 'NH', 'NJ', 
                      'NY', 'RI', 'SD', 'VT', 'WI', 'WY')) AND (MBR_COV_END_DATE BETWEEN @1stofYear AND @endofqrtr) OR
                      (NOT (PROD_TYPE_CODE = 'MCD')) AND (MBR_STATUS_CD IN ('I', 'A')) AND (MBR_ADMIN_DIV_CD IN ('CT', 'IA', 'IL', 'MA', 'ME', 'MI', 'MN', 'MT', 'ND', 'NE', 'NH', 'NJ', 
                      'NY', 'RI', 'SD', 'VT', 'WI', 'WY')) AND (ISNULL(MBR_COV_END_DATE, '12/31/9999') = '12/31/9999')
GROUP BY MBR_STATUS_CD, MBR_ADMIN_DIV_CD,MBR_LAST_NAME, MBR_FIRST_NAME, MBR_DOB, MBR_MEDICARE_ID, MBR_COV_EFF_DATE, MBR_COV_END_DATE, CI_GRP_ID, MBR_ADMIN_DIV_CD) as tblCount
Group by MARKET,Enrollment,Disenrollment,count
order by MARKET

我对你的问题做了一些修改。注意:如果使用group by,则不需要使用distinct

SELECT MARKET , COUNT(MARKET) AS MCOUNT ,Sum(Disenrollment) as Disenrollment, Sum(Enrollment) as Enrollment, Case when Sum(MBRcount) <> 0 then Sum(Disenrollment)/Sum(MBRcount) else 0 end as Disenroll, 
Case when Sum(MBRcount) <> 0 then Sum(Enrollment)/Sum(MBRcount) else 0 end as Enroll
from (SELECT MBR_FIRST_NAME, MBR_LAST_NAME, MBR_DOB, MBR_MEDICARE_ID, MBR_COV_EFF_DATE, MBR_COV_END_DATE, MBR_ADMIN_DIV_CD AS MARKET, 
CI_GRP_ID, MBR_STATUS_CD, COUNT(MBR_STATUS_CD) AS MBRcount, 
CASE WHEN MBR_STATUS_CD = 'I' THEN 1 else  0 End as Disenrollment, Case WHEN MBR_STATUS_CD = 'A' THEN 1 else 0 END AS Enrollment 
FROM VW_CI_Snapshot_Today AS c 
WHERE (NOT (PROD_TYPE_CODE = 'MCD')) AND (MBR_STATUS_CD IN ('I', 'A')) AND (MBR_ADMIN_DIV_CD IN ('CT', 'IA', 'IL', 'MA', 'ME', 'MI', 'MN', 'MT', 'ND', 'NE', 'NH', 'NJ', 'NY', 'RI', 'SD', 'VT', 'WI', 'WY')) 
AND (MBR_COV_END_DATE BETWEEN @1stofYear AND @endofqrtr) OR (NOT (PROD_TYPE_CODE = 'MCD')) AND (MBR_STATUS_CD IN ('I', 'A')) 
AND (MBR_ADMIN_DIV_CD IN ('CT', 'IA', 'IL', 'MA', 'ME', 'MI', 'MN', 'MT', 'ND', 'NE', 'NH', 'NJ', 'NY', 'RI', 'SD', 'VT', 'WI', 'WY')) 
AND (ISNULL(MBR_COV_END_DATE, '12/31/9999') = '12/31/9999') 
GROUP BY MBR_STATUS_CD, MBR_ADMIN_DIV_CD,MBR_LAST_NAME, MBR_FIRST_NAME, MBR_DOB, MBR_MEDICARE_ID, MBR_COV_EFF_DATE, MBR_COV_END_DATE, CI_GRP_ID, MBR_ADMIN_DIV_CD) as tblCount 
Group by MARKET
order by MARKET

你想要每个市场的百分比吗?是的,我需要每个市场的百分比。这几乎是我需要的,但似乎死亡人数总是0