【问题标题】:Count valid values per user计算每个用户的有效值
【发布时间】:2012-08-28 22:37:56
【问题描述】:

我有一个包含值列表的表格。 -1 是一个空白值:

 ID    FieldType1A FieldType1B FieldType2A FieldType2B Person
  1             15          14          10          -1      1
  2             16          -1          12          10      1
  3             17          -1           5           6      1
  4              6          -1           7          -1      2
 ...

所以结果应该是:

 Person      FieldType1     FieldType2
      1               4              5
      2               1              1

有一个包含用户 ID 列表的 users 表,是否有一种方法可以迭代该值列表以在结果集中生成人员列表(0 表示字段类型完全有效,因为它只是计数)?我认为T-SQL Column Values Count 的答案是朝着我尝试前进的方向迈出的一步,但不确定如何组合相同的列(A/B 允许列出答案)。我有兴趣将所有有效值组合起来,而不是尝试计算每个有效响应的数量。

【问题讨论】:

    标签: tsql count


    【解决方案1】:

    您可以使用CASE 表达式将所有非负一值更改为1,将-1 值更改为0,然后将它们相加。

    SELECT Person, 
        SUM(CASE WHEN FieldType1A <> -1 THEN 1 ELSE 0 END) + 
            SUM(CASE WHEN FieldType1B <> -1 THEN 1 ELSE 0 END) AS FieldType1,
        SUM(CASE WHEN FieldType2A <> -1 THEN 1 ELSE 0 END) + 
            SUM(CASE WHEN FieldType2B <> -1 THEN 1 ELSE 0 END) AS FieldType2
    FROM YourTable
    GROUP BY Person
    

    【讨论】:

    • 这正是我想要的。运行速度比我用来代替它的 C# 代码快得多。谢谢
    【解决方案2】:
    SELECT Person, 
    count(nullif(FieldType1A, -1)) + count(nullif(FieldType1B, -1)) as FieldType1, 
    count(nullif(FieldType2A, -1)) + count(nullif(FieldType2B, -1)) as FieldType2
    FROM yourtable
    GROUP BY person
    

    【讨论】:

    • 哦,+1 NULLIF;我总是忘记那个功能。
    猜你喜欢
    • 1970-01-01
    • 2017-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-06
    • 2016-03-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多