SQL Server 2008案例语句用于计算记录,而不是具有相同日期但结果不同的另一条记录

时间:2015-06-17 13:22:45

标签: sql sql-server-2008

我需要计算名称和事件名称可以拥有的ID的数量'接受'或者'拒绝'对于同一日期的值。如何编写案例陈述仅使用'接受'值?我已经尝试了很多方法,但仍然统计它们。仍然指望拒绝'记录。 非常感谢任何帮助。

以下示例:

select th.NAME, 
       COUNT(distinct th.HICN_CD) AS HICN_COUNT, 
       case  th.EVENTNAME 
           when 'accept'  then 'Accept' 
           when 'reject'   then 'Reject' ELSE 'N/A'
       END AS Event_Name
from #temp_hicn th
left join #temp_maxdate tm
   on tm.HICN_CD = th.HICN_CD
group by th.NAME, 
         th.EVENTNAME
order by th.NAME ;

2 个答案:

答案 0 :(得分:2)

听起来你想要条件聚合:

select th.NAME, COUNT(distinct th.HICN_CD) AS HICN_COUNT , 
       sum(case th.EVENTNAME when 'accept' then 1 ELSE 0 END) AS NumAccept
from #temp_hicn th left join
     #temp_maxdate tm
     on tm.HICN_CD = th.HICN_CD
group by th.NAME
order by th.NAME;

如果您想为接受计算HICN_CD的不同值:

select th.NAME,
       COUNT(distinct case th.EVENTNAME when 'accept' then th.HICN_CD end) AS HICN_COUNT , 
       sum(case th.EVENTNAME when 'accept' then 1 ELSE 0 END) AS NumAccept
from #temp_hicn th left join
     #temp_maxdate tm
     on tm.HICN_CD = th.HICN_CD
group by th.NAME
order by th.NAME;

答案 1 :(得分:0)

SELECT DISTINCT TH.HICN_CD,TH.NAME,TH.EVENTNAME,TM.MAX_DATE     INTO #TEMP_ACCEPT 来自#TEMP_HICN TH     LEFT JOIN #TEMP_MAXDATE TM     ON TM.HICN_CD = TH.HICN_CD     AND TM.MAX_DATE = TH.MAX_DATEID GROUP BY TH.MEDICARE_HICN_CD,TH.NAME,TH.EVENTNAME,TM.MAX_DATE;

SELECT DISTINCT TH.MEDICARE_HICN_CD,TH.NAME,TH.EVENTNAME,TM.MAX_DATE     INTO #TEMP_REJECT 来自#TEMP_HICN TH     LEFT JOIN #TEMP_MAXDATE TM     ON TM.HICN_CD = TH.HICN_CD     AND TM.MAX_DATE = TH.MAX_DATEID     在哪里TH.EVENTNAME ='拒绝'     和TH.HICN_CD + TH.NAME NOT IN(从#TEMP_ACCEPT中选择HICN_CD + NAME) GROUP BY TH.HICN_CD,TH.NAME,TH.EVENTNAME,TM.MAX_DATE;

SELECT *     INTO #TEMP_EVENT 来自#TEMP_ACCEPT     联盟 选择 * 来自#TEMP_REJECT;

WITH EVENT_DUP AS( SELECT DISTINCT HICN_CD,NAME,COUNT()AS'EVENTS' 来自#TEMP_EVENT GROUP BY HICN_CD,NAME 有计数()> 1 ) 从#TEMP_EVENT删除     HICN_CD + NAME IN(SELECT HICN_CD + NAME FROM EVENT_DUP)     AND MAX_DATE为空;

SELECT EV.NAME,EV.EVENTNAME,COUNT(DISTINCT EV.HICN_CD)AS HICN_COUNT 来自#TEMP_EVENT EV     LEFT JOIN #TEMP_MAXDATE TM     ON TM.HICN_CD = EV.HICN_CD GROUP BY EV.NAME,EV.EVENTNAME 按EV.NAME排序;