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。根据逻辑,人们希望情况并非如此。不过,我会在答案中添加警告。很抱歉,我忘了添加重要的一点,我有两组列,请参阅更新。我需要两组列的总数