group by on union all result SQL 服务器
group by on union all result SQL Server
我是 SQL 服务器的新手。我有一个 SQL 查询,我在其中执行了一个 union all,这 2 个单独的查询有分组依据。
select top 5
Starttime, convert(date,row_date) as Date,
sum(acdcalls + abncalls) [Offered],
sum(acdcalls) [Handled],
sum(abncalls) [Abandoned],
sum(acdcalls1 + acdcalls2 + acdcalls3 + acdcalls4 + acdcalls5) [Answered within SLA],
case
when sum(acdcalls) != 0
then cast((sum(acdcalls1 + acdcalls2 + acdcalls3 + acdcalls4 + acdcalls5)) * 1.0 / sum((acdcalls)) * 1.0 * 100 as decimal(10, 2))
else 0
end as [SLA in %]
from
db1
where
row_date = getdate()
group by
Starttime, row_Date
union all
select top 5
Starttime, convert(date,row_date) as Date,
sum(acdcalls + abncalls) [Offered],
sum(acdcalls) [Handled],
sum(abncalls) [Abandoned],
sum(acdcalls1 + acdcalls2 + acdcalls3 + acdcalls4 + acdcalls5) [Answered within SLA],
case
when sum(acdcalls) != 0
then cast((sum(acdcalls1 + acdcalls2 + acdcalls3 + acdcalls4 + acdcalls5)) * 1.0 / sum((acdcalls)) * 1.0 * 100 as decimal(10, 2))
else 0
end as [SLA in %]
from
db2
where
row_date = getdate()
group by
Starttime, row_Date
Starttime
列具有共同的值。我想对结果进行 Starttime
分组。我怎样才能做到这一点?任何帮助将不胜感激
你需要先做并集,再做聚合。以下示例使用子查询,但如果您愿意,可以使用临时 table 代替:
Select StartTime, Row_Date, sum(acdcalls+abncalls)...[other sums here]
From (
select * from db1
union all
select * from db2
) a
group by StartTime, RowDate
如有必要,您仍然可以在子查询中使用您的 where 子句和您的特定列(上面的示例仅在 db1 和 db2 具有相同顺序的相同列时才有效 - 否则您将需要指定您的列) .不过,如果您将两个选择限制为 Row_Date = GetDate(),我不确定为什么要按 Row_Date 分组。
我是 SQL 服务器的新手。我有一个 SQL 查询,我在其中执行了一个 union all,这 2 个单独的查询有分组依据。
select top 5
Starttime, convert(date,row_date) as Date,
sum(acdcalls + abncalls) [Offered],
sum(acdcalls) [Handled],
sum(abncalls) [Abandoned],
sum(acdcalls1 + acdcalls2 + acdcalls3 + acdcalls4 + acdcalls5) [Answered within SLA],
case
when sum(acdcalls) != 0
then cast((sum(acdcalls1 + acdcalls2 + acdcalls3 + acdcalls4 + acdcalls5)) * 1.0 / sum((acdcalls)) * 1.0 * 100 as decimal(10, 2))
else 0
end as [SLA in %]
from
db1
where
row_date = getdate()
group by
Starttime, row_Date
union all
select top 5
Starttime, convert(date,row_date) as Date,
sum(acdcalls + abncalls) [Offered],
sum(acdcalls) [Handled],
sum(abncalls) [Abandoned],
sum(acdcalls1 + acdcalls2 + acdcalls3 + acdcalls4 + acdcalls5) [Answered within SLA],
case
when sum(acdcalls) != 0
then cast((sum(acdcalls1 + acdcalls2 + acdcalls3 + acdcalls4 + acdcalls5)) * 1.0 / sum((acdcalls)) * 1.0 * 100 as decimal(10, 2))
else 0
end as [SLA in %]
from
db2
where
row_date = getdate()
group by
Starttime, row_Date
Starttime
列具有共同的值。我想对结果进行 Starttime
分组。我怎样才能做到这一点?任何帮助将不胜感激
你需要先做并集,再做聚合。以下示例使用子查询,但如果您愿意,可以使用临时 table 代替:
Select StartTime, Row_Date, sum(acdcalls+abncalls)...[other sums here]
From (
select * from db1
union all
select * from db2
) a
group by StartTime, RowDate
如有必要,您仍然可以在子查询中使用您的 where 子句和您的特定列(上面的示例仅在 db1 和 db2 具有相同顺序的相同列时才有效 - 否则您将需要指定您的列) .不过,如果您将两个选择限制为 Row_Date = GetDate(),我不确定为什么要按 Row_Date 分组。