2015-04-15 3 views
0

Я потерял на это у меня есть 4 колонки:SQL процент от нескольких значений

Market, Count, Disnerollment, Enrollment

Мне нужно, чтобы получить процент между disenrollment и enrollment однако они основаны на колонке MBRstatus, что я сделал два отдельных случая, чтобы разделить его.

Я не знаю, как я могу calulate процент от этого запроса создаются как это, но я не знаю, как я мог бы получить столбцы, чтобы отделить другой путь любая помощь будет оценена

Я включил запрос

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 
+0

Вы хотите, чтобы проценты для каждого рынка? – Ewan

+0

да, мне нужен процент для каждого рынка – lance9877

ответ

0

Я внесла несколько изменений в ваш запрос. NB Вам не нужно использовать разные, если вы используете группу.

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

Это почти то, что мне нужно, но кажется, что diesnroll всегда 0 – lance9877

+0

Спасибо. Я смог манипулировать этим в то, что мне было нужно – lance9877

Смежные вопросы