【问题标题】:Provide status of an Activity based on date column in a view in SQL Server在 SQL Server 的视图中提供基于日期列的活动状态
【发布时间】:2018-03-23 16:49:37
【问题描述】:

在视图中必须根据日期提供Status

条件是:

  • 如果其中一项活动没有此人的日期,则StatusActive

  • 如果所有活动都有此人的日期,则StatusNot Active

我如何为一个人获得STATUS

例如:

|PersonId|Name|Activity | Date      | 
+--------+----+---------+-----------+
| 1      |John| a       | 01/01/2015|
| 1      |John| b       | 03/12/2016|
| 1      |John| c       | 02/13/2017|
| 2      |Sam | d       | 06/01/2014|
| 2      |Sam | e       | 05/18/2016|
| 2      |Sam | f       | NULL      |   

视图中的输出:

|PersonId|Name|Status    | 
+--------+----+----------+
| 1      |John|Not Active| 
| 2      |Sam | Active   | 

【问题讨论】:

  • @Marc_s 感谢您的编辑。

标签: sql sql-server group-by aggregate-functions greatest-n-per-group


【解决方案1】:

您可以通过聚合来做到这一点:

select personid, name,
       (case when count(*) = count(date) then 'Not Active' else 'Active' end) as status
from t
group by personid, name;

【讨论】:

    【解决方案2】:

    我认为 Gordon 的答案更好,但自从我开始输入此内容后,我想我还是会完成它。 像

    declare @maxDate date = datefromparts(9999, 12, 31)
    
    select case when max(isnull(Date, @MaxDate)) = @maxDate) then 'Active' else 'inactive'
    from ...
    

    【讨论】:

      猜你喜欢
      • 2018-12-15
      • 2018-03-27
      • 1970-01-01
      • 2021-05-17
      • 1970-01-01
      • 1970-01-01
      • 2019-05-11
      • 2020-09-21
      • 1970-01-01
      相关资源
      最近更新 更多