【问题标题】:Transforming table of categorical data in SQL Server在 SQL Server 中转换分类数据表
【发布时间】:2021-12-26 19:35:02
【问题描述】:

我有两列状态和已验证状态,我想将它们转换为每个唯一计数值的列。我究竟如何在 SQL Server 中做到这一点?

输入

Year   Status     Verified_Status
---------------------------------
2021   Accepted   Verified
2021   Accepted   Verified
2021   Rejected   Unverified
2021   Accepted   Unverified
2021   Accepted   Unverified 
2020   Rejected   Unverified
2020   Accepted   Unverified
2020   Accepted   Unverified 

预期输出

Year  Accepted Rejected Verified Unverified
-------------------------------------------
2021  4        1        2        3
2020  2        1        0        3

【问题讨论】:

  • 研究“条件聚合”。

标签: sql sql-server sql-server-2012


【解决方案1】:
Select 
        Count(Case When Status = 'Accepted' then 1 end) Accepted,
        Count(Case When Status = 'Rejected' then 1 end) Rejected,
        Count(Case When Status = 'Verified' then 1 end) Verified,
        Count(Case When Status = 'Unverified' then 1 end) Unverified
    from T group by year

【讨论】:

  • 错过的年份,Verified_Status 列和分组依据
【解决方案2】:

正如 Larnu 所暗示的那样......一个简单的条件聚合应该可以解决问题

Select Year
      ,Accepted   = sum( case when [Status]='Accepted' then 1 else 0 end )
      ,Rejected   = sum( case when [Status]='Rejected' then 1 else 0 end )
      ,Verified   = sum( case when [Verified_Status]='Verified' then 1 else 0 end )
      ,Unverified = sum( case when [Verified_Status]='Unverified' then 1 else 0 end )
 From  YourTable
 Group By Year
 Order By Year Desc  -- << Optional

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-26
    • 1970-01-01
    • 1970-01-01
    • 2018-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多