使用if then else计算类型

时间:2015-01-22 16:24:54

标签: sql if-statement count nested case

我有以下表格,其中我需要将type = D计为 1 ,但如果该ID以R结尾,那么它应计为 0

ID 123始终以D开头,然后它可以是R,然后可以是D或A.

 ID         Decision Dt       Type/Status
 123        1/15/2014          D     
 123        1/20/2014          A  
 123        1/15/2014          R

我已将SQL编写为sum(if(type=d)then 1 else 0 end)。我得到正确的计数,直到type/status是R.这是DB中唯一的ID,以状态R结束而不是移动到D.我需要帮助编写sql。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您对所有类型为D和R的记录感兴趣。您还需要以某种方式标记最后一条记录。这可以通过RANK完成。每个ID的最新条目排名第1。

然后按ID进行分组,查看该ID是否存在类型为R的最后一条记录。如果是,则结果为0,否则计数类型D.

select 
  id,
  case when max(case when last_is_one = 1 and type = 'R' then 1 end) = 1 then
    0
  else
    count(case when type = 'D' then 1 end)
  end as d_count
from
(
  select  
    id,
    type,
    rank() over (partition by id order by decision_dt desc) as last_is_one
  from mytable 
  where type in ('D','R')
) d_and_r
group by id;

SQL小提琴:http://www.sqlfiddle.com/#!3/48c820/3