【问题标题】:Case and Sum of Multiple columns多列的大小写和总和
【发布时间】:2014-09-22 23:13:59
【问题描述】:

在我的数据库中,我有几千名客户,某些标准以不同的时间间隔发生。一周中的每一天都有列(M,Tu,W,Th,F,Sa,Su)。我需要查看每周有多少天会触发任务。我有下面的查询,但它当然也会返回一周中的特定日期以及每周的 TotalDays。但是,我只需要查看 TotalDays 而不是每天的额外显示。我怎样才能做到这一点?

SELECT X.*,M+Tu+W+Th+F+Sa+Su AS TotalDays
FROM
    (
    SELECT
        CASE WHEN [M] = '1' THEN 1 ELSE 0 END as "M",
        CASE WHEN [Tu] = '1' THEN 1 ELSE 0 END as  "Tu",
        CASE WHEN [W] = '1' THEN 1 ELSE 0 END as "W",
        CASE WHEN [Th] = '1' THEN 1 ELSE 0 END as  "Th",
        CASE WHEN [F] = '1' THEN 1 ELSE 0 END as "F",
        CASE WHEN [Sa] = '1' THEN 1 ELSE 0 END as  "Sa",
        CASE WHEN [Su] = '1' THEN 1 ELSE 0 END as "Su"
    FROM
        Customers
    ) X

我应该说这里的数据类型是位,所以我不能只做如下的总和,因为这会返回数据类型位对求和运算符无效的错误。

SELECT 
 (SUM(M) + SUM(Tu) + SUM(W) + SUM(Th) + SUM(F) + SUM(Sa) + SUM(Su)) as TotalDays
FROM Customers

【问题讨论】:

  • 如果使用 COUNT 而不是 SUM 会怎样?
  • COUNT 不起作用,因为它为每个客户返回 7,因此它同时计算 0 和 1 值。如前所述,SUM 不起作用我得到返回的错误,即数据类型位对 sum 运算符无效。

标签: sql


【解决方案1】:

这是你想要的吗?

SELECT SUM(CASE WHEN [M] = '1' THEN 1 ELSE 0 END +
           CASE WHEN [Tu] = '1' THEN 1 ELSE 0 END +
           CASE WHEN [W] = '1' THEN 1 ELSE 0 END +
           CASE WHEN [Th] = '1' THEN 1 ELSE 0 END +
           CASE WHEN [F] = '1' THEN 1 ELSE 0 END +
           CASE WHEN [Sa] = '1' THEN 1 ELSE 0 END +
           CASE WHEN [Su] = '1' THEN 1 ELSE 0 END
          )
FROM Customers;

【讨论】:

  • 这正是我所需要的。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2022-08-14
  • 1970-01-01
  • 2021-12-15
  • 2019-08-07
  • 1970-01-01
  • 2010-12-29
  • 2016-05-14
  • 1970-01-01
相关资源
最近更新 更多