多列的大小写和总和
Posted
技术标签:
【中文标题】多列的大小写和总和【英文标题】: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 运算符无效。 【参考方案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;
【讨论】:
这正是我所需要的。非常感谢!以上是关于多列的大小写和总和的主要内容,如果未能解决你的问题,请参考以下文章