Sql server 新列的Sql和

Sql server 新列的Sql和,sql-server,sum,Sql Server,Sum,我在下面的一个查询中创建了基于条件的新列: select sum(case when Overall_Time_Spent < 0 then 1 else 0 end) as Errors, sum(case when Overall_Time_Spent between 0 and 3 then 1 else 0 end) as _0_3_days, sum(case when Overall_Time_Spent = 4 then 1 else 0 end) as

我在下面的一个查询中创建了基于条件的新列:

select 
   sum(case when Overall_Time_Spent < 0 then 1 else 0 end) as Errors,
   sum(case when Overall_Time_Spent between 0 and 3 then 1 else 0 end) as _0_3_days,
   sum(case when Overall_Time_Spent = 4 then 1 else 0 end) as _4_days,
   sum(case when Overall_Time_Spent = 5 then 1 else 0 end) as _5_days,
   sum(case when Overall_Time_Spent between 6 and 8 then 1 else 0 end) as _6_8_days,
   sum(case when Overall_Time_Spent >= 9 then 1 else 0 end) as more_than_9_days,

   avg(case when Overall_Time_Spent < 0 then 100.0 else 0 end) as Errors_percent,
   avg(case when Overall_Time_Spent between 0 and 3 then 100.0 else 0 end) as _0_3_percent,
   avg(case when Overall_Time_Spent = 4 then 100.0 else 0 end) as _4_percent,
   avg(case when Overall_Time_Spent = 5 then 100.0 else 0 end) as _5_percent,
   avg(case when Overall_Time_Spent between 6 and 8 then 100.0 else 0 end) as _6_8_percent,
   avg(case when Overall_Time_Spent >= 9 then 100.0 else 0 end) as more_than_9_days_percent,
我如何在这个查询中添加一个查询,在这个查询中我可以再添加两列,这两列给出了所有和的总和和所有平均值的总和

提前感谢您提供的CASE表达式covers=9,如果您的数据是int,这是完全可能的。因此,您只需添加

COUNT(Overall_Time_Spent) AS DaysTotal
如果不是int,那么您的CASE表达式将丢失介于3和4、4和5、5和6以及8和9之间的值,但是,计数将包括它们。

如果您的数据是int,则您的CASE表达式可能覆盖=9。因此,您只需添加

COUNT(Overall_Time_Spent) AS DaysTotal
如果不是int,那么您的CASE表达式将丢失3和4、4和5、5和6以及8和9之间的值,但是,计数将包括它们。

尝试使用子查询:

SELECT a.*, (Errors + _0_3_days...) as Total FROM (
select 
   sum(case when Overall_Time_Spent < 0 then 1 else 0 end) as Errors,
   sum(case when Overall_Time_Spent between 0 and 3 then 1 else 0 end) as _0_3_days,
   sum(case when Overall_Time_Spent = 4 then 1 else 0 end) as _4_days,
   sum(case when Overall_Time_Spent = 5 then 1 else 0 end) as _5_days,
   sum(case when Overall_Time_Spent between 6 and 8 then 1 else 0 end) as _6_8_days,
   sum(case when Overall_Time_Spent >= 9 then 1 else 0 end) as more_than_9_days
) as a
尝试使用子查询:

SELECT a.*, (Errors + _0_3_days...) as Total FROM (
select 
   sum(case when Overall_Time_Spent < 0 then 1 else 0 end) as Errors,
   sum(case when Overall_Time_Spent between 0 and 3 then 1 else 0 end) as _0_3_days,
   sum(case when Overall_Time_Spent = 4 then 1 else 0 end) as _4_days,
   sum(case when Overall_Time_Spent = 5 then 1 else 0 end) as _5_days,
   sum(case when Overall_Time_Spent between 6 and 8 then 1 else 0 end) as _6_8_days,
   sum(case when Overall_Time_Spent >= 9 then 1 else 0 end) as more_than_9_days
) as a

要么在外部作用域上执行此操作,要么只添加另一个具有完整值范围的值。要么在外部作用域上执行此操作,要么只添加另一个具有完整值范围的值。这是最简单的解决方案,但值得一提的是,如果OP的列为int,则它可以工作,例如3.5这样的值不在其总和中处理。非常正确@Ezlo。根据逻辑,人们希望情况并非如此。不过,我会在答案中添加警告。很抱歉,我忘了添加重要的一点,我有两组列,请参阅更新。我需要两组列的总数。这是最简单的解决方案,但值得一提的是,如果OP的列为int,那么它可以工作。像3.5这样的值没有在他的总和中处理。非常正确@Ezlo。根据逻辑,人们希望情况并非如此。不过,我会在答案中添加警告。很抱歉,我忘了添加重要的一点,我有两组列,请参阅更新。我需要两组列的总数