SELECT
sum(TotalHoursM)
+ (TotalHoursT)
+ (TotalHoursW)
+ (TotalHoursTH)
+ (TotalHoursF)
AS TOTAL
FROM LeaveRequest
Answers:
如果列的值为0,就可以了,我的猜测是您在使用Null值时遇到问题,在这种情况下,您将需要使用IsNull(Column, 0)
以确保其始终始终为0。
IsNull
不是可移植的,并且该问题未指定数据库。请参阅下文COALESCE
,它是可移植的(如果性能并非始终最佳)。
使用该ISNULL
函数的先前答案仅对MS Sql Server是正确的。该COALESCE
功能还将在SQL Server中工作。但也将在标准SQL数据库系统中工作。在给定的示例中:
SELECT sum(COALESCE(TotalHoursM,0))
+ COALESCE(TotalHoursT,0)
+ COALESCE(TotalHoursW,0)
+ COALESCE(TotalHoursTH,0)
+ COALESCE(TotalHoursF,0) AS TOTAL FROM LeaveRequest
这与ISNULL
解决方案相同,唯一的区别是函数的名称。两者都可以在SQL Server中使用,但是COALESCE
不是ANSI标准ISNULL
。而且,COALESCE
更灵活。
ISNULL
将仅使用两个参数。如果第一个参数为NULL,则返回第二个参数的值,否则返回第一个参数的值。COALESCE将2设为'n'(我不知道'n'的限制)参数,并返回第一个参数not的值NULL
。当只有两个参数时,效果与相同ISNULL
。
ISNULL
与 COALESCE
?
仅供参考,MySQL的等效语句为:IFNull(Column,0)。
如果不为空,则此语句的值为列值,否则为0。
看起来您想对所有列求和(我不确定“总和3列”来自何处),而不仅仅是TotalHoursM,所以请尝试以下操作:
SELECT
SUM( ISNULL(TotalHoursM ,0)
+ ISNULL(TotalHoursT ,0)
+ ISNULL(TotalHoursW ,0)
+ ISNULL(TotalHoursTH ,0)
+ ISNULL(TotalHoursF ,0)
) AS TOTAL
FROM LeaveRequest
我会尝试这样的:
select sum (case when TotalHousM is null then 0 else TotalHousM end)
+ (case when TotalHousT is null then 0 else TotalHousT end)
+ (case when TotalHousW is null then 0 else TotalHousW end)
+ (case when TotalHousTH is null then 0 else TotalHousTH end)
+ (case when TotalHousF is null then 0 else TotalHousF end)
as Total
From LeaveRequest
SQL Server
未被标记的 ?