【问题标题】:Count IF Function Equivalent计数 IF 函数等价
【发布时间】:2020-06-02 22:43:18
【问题描述】:

我有四列:A Team、B Team、C Team、D Team。

每一行条​​目的每一列都可以包含“是”或“否”。比如像这样:

A Team    B Team    C Team    D Team
------------------------------------
Yes       Yes       No        No

我希望创建一个额外的列NumberofTeams,只要有肯定的地方就可以求和。所以在这种情况下,它将返回 2 - 表示涉及 2 个团队。

我打算通过 CASE 函数尝试它,但相信这必须涵盖每一个排列?

select 
    *, 
    NumberofTeams = select case 
                              when [A Team] = 'Yes' and [B Team] = 'Yes' 
                                 then 2 
                              when [A Team] = 'Yes' and [C Team] = 'Yes' 
                                 then 2

等等。

如果有“更清洁”的方式?

【问题讨论】:

  • 如果您对每个真/假值使用bit 而不是散文,那将会“更干净”。这也将避免处理像'Y''?''Ω' 这样的值。作为数字数据类型,位更容易添加。

标签: sql sql-server database tsql count


【解决方案1】:

如果唯一的选择是'Yes''No',那么您可以走捷径。由于它们的长度相差1,您可以添加字符串的长度并减去每列较短字符串的长度。更简单地说,将字符串连接起来,取总长度并减去足够的长度来计算 no:

declare @Samples as Table ( ATeam VarChar(3), BTeam VarChar(3), CTeam VarChar(3), DTeam VarChar(3) );
insert into @Samples values ( 'No', 'No', 'No', 'No' ), ( 'Yes', 'No', 'Yes', 'No' ), ( 'Yes', 'Yes', 'Yes', 'Yes' );

select *, Len( ATeam + BTeam + CTeam + DTeam ) - 8 as NumberOfTeams
  from @Samples;

【讨论】:

    【解决方案2】:

    在这里找到我的答案:How to return count if column values conatains specific string in it

    对于任何想知道的人:

    SELECT
        col1, col2, col3, col4,
        (CASE WHEN col1 LIKE '%[_]X%' THEN 1 ELSE 0 END +
         CASE WHEN col2 LIKE '%[_]X%' THEN 1 ELSE 0 END +
         CASE WHEN col3 LIKE '%[_]X%' THEN 1 ELSE 0 END +
         CASE WHEN col4 LIKE '%[_]X%' THEN 1 ELSE 0 END) AS cnt
    FROM yourTable
    

    【讨论】:

    • 目前尚不清楚计算包含'_X' 的列是否会帮助 OP,但只有您知道。
    【解决方案3】:

    这是一种方法:

    select
        t.*,
        case when [A Team] = 'Yes' then 1 else 0 end
            + case when [B Team] = 'Yes' then 1 else 0 end
            + case when [C Team] = 'Yes' then 1 else 0 end
            + case when [D Team] = 'Yes' then 1 else 0 end
            as NumberOfTeams
    from mytable t
    

    【讨论】:

      猜你喜欢
      • 2021-03-25
      • 2021-09-25
      • 2011-06-08
      • 1970-01-01
      • 2011-11-10
      • 2011-10-13
      • 2011-05-09
      • 2013-01-31
      • 2015-11-22
      相关资源
      最近更新 更多