【问题标题】:SQL count records if only type x exists on date or other types if other than type x exists on date如果日期上仅存在类型 x,则 SQL 计数记录;如果日期上存在类型 x 以外的其他类型,则 SQL 计数记录
【发布时间】:2014-10-11 15:00:42
【问题描述】:

在 SQL SERVER 2008 R2 上,我有下表:

  • event_idint
  • people_idint
  • event_date日期
  • event_typevarchar

event_type 可能是:

  • "encounter"
  • "legal"
  • "food"
  • "job_search"
  • "education"
  • "utilities"
  • "child_care"

我想统计事件。

但我希望仅当它是为该 people_id/event_date 组合记录的唯一 event_type 时才计算“遭遇” event_type。

如果该 people_id/event_date 组合还有另一个 event_type,我想计算该 people_id/event_date 组合的所有 event_type 不是 event_type "encounter"。

在上述条件下,我希望返回日期范围 YEAR(event_date) = 2013 内所有事件的计数

我找到了使用SUM(CASE WHEN ...) AS x 的其他解决方案,这似乎是要走的路,但是当我将此与仅计算除"encounter" 以外的类型相结合时,如果"encounter" 和任何其他@987654337 @ 出现在相同的日期/人或其他event_type 出现在相同的日期/人没有类型"encounter"

感谢任何建议!

【问题讨论】:

    标签: tsql date sql-server-2008-r2 count case


    【解决方案1】:

    我认为您可以将您的查询分为两部分,一部分仅用于“遇到”,另一部分用于其他部分:

    select ...
    where event_type='encounter'
    group by ...
    having count(event_type)=1
    
    Union
    
    select count(event_type),...
    where event_type <> 'encounter'
    group by ...
    having count(event_type)>1
    

    【讨论】:

    • 谢谢 ram_sql!我尝试使用 UNION 接近,这似乎是最好的结果。
    猜你喜欢
    • 2011-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-25
    • 1970-01-01
    相关资源
    最近更新 更多