Sql 组合查询以显示一组结果
我有两个单独的查询,需要根据日期值进行匹配和组合Sql 组合查询以显示一组结果,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有两个单独的查询,需要根据日期值进行匹配和组合 select convert(varchar,Delivery_Date,101) as 'Date', sum(case when billing_group = '3' and delivery_date >= dateadd(day,datediff(day, 0, GetDate()) - 30, 0) then 1 else 0 end) as 'OR to WA' from orders where deliv
select convert(varchar,Delivery_Date,101) as 'Date',
sum(case when billing_group = '3' and delivery_date >= dateadd(day,datediff(day, 0, GetDate()) - 30, 0) then 1 else 0 end) as 'OR to WA'
from orders
where delivery_Date >= dateadd(day, datediff(day, 0, GetDate()) - 30, 0) and billing_group in ('3')
group by delivery_date
order by date desc
select convert(varchar,Origin_Date,101) as 'Date',
sum(case when billing_group = '4' and origin_date >= dateadd(day, datediff(day, 0, GetDate()) - 30, 0)then 1 else 0 end) as 'WA to OR'
from orders
where origin_Date >= dateadd(day, datediff(day, 0, GetDate()) - 30, 0) and billing_group in ('4')
group by origin_Date
order by date desc
请注意,我在第一个查询中使用了不同的日期值(交货日期),在第二个查询中使用了不同的日期值(原产地日期)
谢谢你的帮助 尝试使用UNION并添加缺少的列 然后进行分组和排序
select * from (
convert(varchar,Delivery_Date,101) as 'Date',
sum(case when billing_group = '3' and delivery_date >= dateadd(day,datediff(day, 0, GetDate()) - 30, 0) then 1 else 0 end) as 'OR to WA',
0 as 'WA to OR'
from orders
where delivery_Date >= dateadd(day, datediff(day, 0, GetDate()) - 30, 0) and billing_group in ('3')
-- group by delivery_date
--- order by date desc
UNION
select convert(varchar,Origin_Date,101) as 'Date',
0 as 'OR to WA'
sum(case when billing_group = '4' and origin_date >= dateadd(day, datediff(day, 0, GetDate()) - 30, 0)then 1 else 0 end) as 'WA to OR'
from orders
where origin_Date >= dateadd(day, datediff(day, 0, GetDate()) - 30, 0) and billing_group in ('4')
--group by origin_Date
--order by date desc
) group by [Date]
order by [Date] desc
我认为您只需要条件聚合,但您的查询提供了其他改进空间:
select convert(varchar(255), v.thedate, 101) as [Date],
sum(case when o.billing_group = 3 then 1 else 0 end) as [OR to WA],
sum(case when o.billing_group = 4 then 1 else 0 end) as [WA to OR]
from orders o cross apply
(values (case when o.billing_group = 3 then delivery_date else o.origin_date end)
) v(the_date)
where v.thedate >= dateadd(day, -30, cast(getdate() as date)) and
o.billing_group in (3, 4)
group by convert(varchar(255), v.thedate, 101)
order by v.thedate desc
注:
- 切勿在没有长度参数的情况下使用
。长度因上下文而异,可能无法达到预期效果varchar()
- 我猜,
是一个数字。如果是这样,不要使用单引号。如果我错了,一定要用单引号billing\u group
- 我不知道
的数据类型是什么。通过完整表达式进行聚合比仅通过列进行聚合更安全交货日期
- 不要对列别名使用单引号。仅对字符串和日期常量使用单引号
- 没有理由使用在
中添加天数的“技巧”来删除时间组件。相反,只需转换为0
date
的条件不必出现在delivery\u date
表达式和case
子句中where