代码之家  ›  专栏  ›  技术社区  ›  Lyndon L.

如何修复基于Cognos中的隐藏条件进行计数的SQL Case语句?

  •  0
  • Lyndon L.  · 技术社区  · 7 年前

    我正在尝试根据Cognos中的不同标准创建一个计数。我看过其他帖子,但它们似乎在字段可见时起作用,我需要让它在字段不可见时起作用。当变量在报表中可见时,我可以使CASE语句工作,但我不明白为什么在删除变量时CASE语句工作。

    Cognos报告如下所示:

    Title    Test                 Test Status  Count Passed Count Failed Count Withdrawn
    Ninja    Physical Aptitude    Passed        50           NULL         NULL
    Ninja    Physical Aptitude    Failed        NULL         23           NULL
    Ninja    Physical Aptitude    Withdrawn     NULL         NULL         11
    

    通过的计数使用以下内容:

    CASE WHEN [Test Status (Condensed)] = 'Passed Group'
    THEN COUNT(DISTINCT [Applicant ID])
    ELSE NULL
    END
    

    计数失败和计数撤消也是如此。它起作用了。但我的目标是每个标题获得一行。所以,当我删除 [Test Status (Condensed)] 我得到如下输出:

    Title    Test                 Count Passed  Count Failed  Count Withdrawn
    Ninja    Physical Aptitude     84            84           84
    

    它不再统计每个考试状态的不同申请人,而是统计所有申请人(50+23+11)。

    所需输出为:

    Title    Test                 Count Passed  Count Failed  Count Withdrawn
    Ninja    Physical Aptitude     50            23           11
    

    你能告诉我我做错了什么吗?如果有关系, [测试状态(浓缩)] 是从原始组定义自定义组的字段 [Test Status] . 或者我需要做点别的事情?

    1 回复  |  直到 7 年前
        1
  •  0
  •   MatBailie    7 年前

    将箱子移到计数内。。。

    COUNT(DISTINCT CASE WHEN [Test Status] = 'Passed' THEN [Applicant ID] END)
    

    这样想吧。。。

    • 对于每个输入行,采用申请人id,但仅针对 'Passed' ( ELSE NULL 是隐式的)
    • 然后数一数 ( NULL 被忽略)

    然后可以有一个单独的字段 Failed ...

    COUNT(DISTINCT CASE WHEN [Test Status] = 'Failed' THEN [Applicant ID] END)