繁体   English   中英

将工作查询合并为一个查询,并在结果集中包含多列

[英]Combining working queries into one query with multiple columns in result set

我有2个基本查询,都按预期工作并返回预期结果:

select
  empNumber,
  sum(salesPrice) as categorySales
from testSchema.sales 
where empNumber = 12345
and date between '2018-01-01' and '2018-04-31'
and g.category = 'NewCategory'
group by empNumber;

select
  empNumber,
  sum(salesPrice) as totalSales
from testSchema.sales 
where empNumber = 12345
and date between '2018-01-01' and '2018-04-31'
group by empNumber;

但是,我想将它们组合成一个查询,该查询将每个结果作为自己的列返回。 目前,这两个查询之间的主要区别是附加的AND子句创建了一个特定的值。 目前的结果是

第一个查询:

empNumber  |  categorySales
----------------------------
12345               15603.00

第二个查询:

empNumber  |  totalSales
----------------------------
12345           350253.00

但我想找到一种高性能且可扩展的方式来将它们结合起来

所需结果:

empNumber  |  categorySales  |  totalSales
-----------------------------------------------
12345           15603.00            350253.00

实现此目标的最有效方式是什么,以便将来我可以添加更多子句并返回一个结果集?

合并两者的最简单方法(如果您没有重复的值)是FULL JOIN

尝试这个

with c as(
select
  empNumber,
  sum(salesPrice) as categorySales
from testSchema.sales 
where empNumber = 12345
and date between '2018-01-01' and '2018-04-31'
and g.category = 'NewCategory'
group by empNumber
), d as(
select
  empNumber,
  sum(salesPrice) as totalSales
from testSchema.sales 
where empNumber = 12345
and date between '2018-01-01' and '2018-04-31'
group by empNumber
)
Select isnull(c.empNumber,d.empNumber) as empNumber
      ,c.categorySales
      ,d.totalSales
  from c full join d ON (c.empNumber = d.empNumber)

将通用条件包括在wherewhere并有条件地where汇总,即使用case表达式。

select
  empNumber,
  sum(case when category = 'NewCategory' then salesPrice else 0 end) as categorySales,
  sum(salesPrice) as totalSales
from testSchema.sales 
where empNumber = 12345
and date between '2018-01-01' and '2018-04-30'
group by empNumber;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM