SUM(value) 其中 {date filter) 在聚合查询中
SUM(value) where {date filter) is in an aggregation query
我正在对临时 table () 进行聚合查询,需要过滤日期范围内的总和部分。
我的查询是:
insert @temp2(name, cost)
select ename6, sum(dqr.cost)
from dbo.condensed7day_query_result dqr
group by dqr.ename6;
但是,我需要 sum(dqr.cost) 实际上是
sum(dqr.cost) (dbo.condensed7day_query_result.start_date >= @StartDate) and (dbo.condensed7day_query_result.start_date <= @EndDate)
如果 sum()
是 null
(没有返回行),我希望它是 0,但如果它是 null 也没关系。但是,我需要该行,因为我需要名称 (ename6
).
如果相关,这是在 SQL 服务器中构建临时 table 的一部分。
我认为您可以使用 where 条件进行过滤,如下所示:
insert @temp2(name, cost)
select ename6, sum(dqr.cost)
from dbo.condensed7day_query_result dqr
where dqr.start_date >= @startDate and dqr.start_date <= @EndDate
group by dqr.ename6;
您可以使用此代码
insert @temp2(name, cost)
Select ename6,cost from
( select ename6, IsNull(sum(dqr.cost),0) as cost
from dbo.condensed7day_query_result dqr
where (start_date >= @StartDate) and (start_date <= @EndDate)
group by dqr.ename6
) Temp
union
( Select ename6 , 0 as cost
from dbo.condensed7day_query_result
where ename6 not in (
Select distinct ename6
from dbo.condensed7day_query_result dqr
where (dqr.start_date >= @StartDate) and (dqr.start_date <= @EndDate)
)
)
在 Sql 中,您可以在 GroupByClause 之前使用 Whereclause,因此 Aggregatefunction 将在 Whereclause 之后对 resltset 起作用。
当 Sum 的结果为 null 时,您也可以使用 Isnull 函数将 return 0 值。第二个 Select returns 是@StartDate 和@EndDate 范围内不存在的记录。
简单:
insert @temp2(name, cost)
select ename6,
sum(
case when dqr.start_date >= @StartDate and dqr.start_date <= @EndDate then dqr.cost
else 0 end
)
from dbo.condensed7day_query_result dqr
group by dqr.ename6;
我正在对临时 table (
我的查询是:
insert @temp2(name, cost)
select ename6, sum(dqr.cost)
from dbo.condensed7day_query_result dqr
group by dqr.ename6;
但是,我需要 sum(dqr.cost) 实际上是
sum(dqr.cost) (dbo.condensed7day_query_result.start_date >= @StartDate) and (dbo.condensed7day_query_result.start_date <= @EndDate)
如果 sum()
是 null
(没有返回行),我希望它是 0,但如果它是 null 也没关系。但是,我需要该行,因为我需要名称 (ename6
).
如果相关,这是在 SQL 服务器中构建临时 table 的一部分。
我认为您可以使用 where 条件进行过滤,如下所示:
insert @temp2(name, cost)
select ename6, sum(dqr.cost)
from dbo.condensed7day_query_result dqr
where dqr.start_date >= @startDate and dqr.start_date <= @EndDate
group by dqr.ename6;
您可以使用此代码
insert @temp2(name, cost)
Select ename6,cost from
( select ename6, IsNull(sum(dqr.cost),0) as cost
from dbo.condensed7day_query_result dqr
where (start_date >= @StartDate) and (start_date <= @EndDate)
group by dqr.ename6
) Temp
union
( Select ename6 , 0 as cost
from dbo.condensed7day_query_result
where ename6 not in (
Select distinct ename6
from dbo.condensed7day_query_result dqr
where (dqr.start_date >= @StartDate) and (dqr.start_date <= @EndDate)
)
)
在 Sql 中,您可以在 GroupByClause 之前使用 Whereclause,因此 Aggregatefunction 将在 Whereclause 之后对 resltset 起作用。 当 Sum 的结果为 null 时,您也可以使用 Isnull 函数将 return 0 值。第二个 Select returns 是@StartDate 和@EndDate 范围内不存在的记录。
简单:
insert @temp2(name, cost)
select ename6,
sum(
case when dqr.start_date >= @StartDate and dqr.start_date <= @EndDate then dqr.cost
else 0 end
)
from dbo.condensed7day_query_result dqr
group by dqr.ename6;