【问题标题】:Count of Type using if then else使用 if then else 的类型计数
【发布时间】:2015-03-21 12:56:34
【问题描述】:

我有下表,其中我需要将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 中唯一以状态 R 结尾且未移动到 D 的 ID。我需要帮助来编写 sql。

提前感谢您的帮助。

【问题讨论】:

  • 你正在使用哪个数据库以及如何查找ID以R结尾
  • @NoDisplayName - 我正在使用 Teradatabase
  • @NoDisplayName - 这些 ID 可以被处理 (D) 和 R(Reverse Disposed).. 并且可以根据决策日期查看..
  • 因此,在您的情况下,您将计算 1,因为 ID 123 的最新日期是 1 月 20 日,类型为 A。如果该记录不存在,则 R 将与 D 在同一天,然后ID 123 的最后一天。然后数 0 还是 1?可以有多个 D 和 R 吗?如果是这样,我们是否仍然只查看最后一条记录并检查 R,我们会计算 Ds 还是不管有多少 Ds 总是 1?
  • @ThorstenKettner - 在这种情况下,即使最新日期是 A(我们可以忽略 As),我们也只计算 D 的数量。每个 ID 可以有超过 1 个 Ds 和 Rs。 ID 总是以 D 开头并以 R 或 A 结尾,在这种情况下,它在同一天同时具有状态(R 和 D),因此它以 R 结尾并且计数应为 0。例如,如果它具有 D--> R --> D 那么 count 应该是 2 如果我们只有 D--> A 那么 count 应该是 1 如果我们有 D-->R-->A 那么 count 应该是 0 (因为它以 R 结尾)我们始终查看该 ID 的最后状态,忽略 As

标签: sql if-statement count nested case


【解决方案1】:

您对所有类型为 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.

【讨论】:

  • 我试过你的查询我仍然得到计数 D 为 1 和 RD 为 0 并且 D 和 RD 的日期都是 1/15/2014
  • 奇怪,查询应该做你想做的事。我添加了一个 SQL 小提琴,您可以在其中看到它的工作原理。我还更正了一些小错误(缺少 CASE 关键字和某些 dbms 需要的派生表的名称),但您已经发现了它们;否则您无法运行查询。所以请看一下小提琴再检查一次。
  • 嘿,我想通了.. 我还在 select 和 group by 中包含了决定 dt,这就是我无法获得它的原因。但是谢谢你,Thorsten Kettner。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多