【问题标题】:How do I reference values in first Select from second Select in a Union?如何从联合中的第二个选择中引用第一个选择中的值?
【发布时间】:2018-01-25 04:01:29
【问题描述】:

我正在尝试将计算字段的“总和”行添加到我拥有的每个“销售代表”的查询结果中。我相信我应该使用联合来添加额外的行,但我不希望再次重新计算每个字段。

这是预期的结果:

|SalesRep|Field1|Field2|CalculatedField|
------------------------------------------
|Bob     |value  |value  |12,000         |
|Bob     |value  |value  |3,000          |
|BobTotal|       |       |Sum(Calculated)|
|Tom     |value  |value  |400            |
|Tom     |value  |value  |800            |
|TomTotal|       |       |Sum(Calculated)|

所以基本上,我现在有这个:

SELECT SalesRep, Field1, Field2, (The Calculated Field)
FROM SalesRepTbl1
union
SELECT SalesRep, Field1, Field2, (The Calculated Field)
FROM SalesRepTbl2

这得到了我需要的所有数据,但不是计算字段的总和。我的下一步是什么?

谢谢!

【问题讨论】:

  • 用您正在使用的数据库(我猜是 SQL Server)标记您的问题。

标签: sql sql-server union


【解决方案1】:

我想你在找grouping sets:

select SalesRep, Field1, Field2, sum(calculated_field) as calculated_field
from ((SELECT SalesRep, Field1, Field2, ? as calculated_field
       FROM SalesRepTbl1
      ) union all
      (SELECT SalesRep, Field1, Field2, ? as calculated_field
       FROM SalesRepTbl2
      )
     ) s
group by grouping sets ( (SalesRep, Field1, Field2), (SalesRep) );

请注意,我将子查询更改为使用 union all 而不是 union,因为我假设您不想承担删除重复项的开销。

【讨论】:

  • 我必须完整阅读所有 Group By Operators,但这绝对是我需要的!非常感谢!
  • 实际上,所以我不确定是否有办法通过它(也许是 CTE?),但我必须重新计算 group by 中的字段,因为 select 语句在通过...分组。避免计算两次的最佳方法?影响很大。
  • @KirklandBrown373 。 . .我不明白你的评论。将为两个表中的每一行计算计算字段。
【解决方案2】:
SELECT SalesRep, Field1, Field2, (The Calculated Field)
FROM SalesRepTbl1
union
SELECT 'BobTotal' as Salesrep,  NULL as Field1, NULL as field2, sum(CalculatedField) as CalcualtedField
FROM SalesRepTbl1
union
SELECT SalesRep, Field1, Field2, (The Calculated Field)
FROM SalesRepTbl2
union
SELECT 'TomTotal' as Salesrep,  NULL as Field1, NULL as field2, sum(CalculatedField) as CalcualtedField
FROM SalesRepTbl2

【讨论】:

  • 请添加解释,而不仅仅是查询
  • @dustytrash 我现在应该编辑它吗?此时它已经超过 2 年了,并且已经有一个更好的、被接受的答案。
猜你喜欢
  • 1970-01-01
  • 2019-09-06
  • 1970-01-01
  • 2013-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-27
  • 1970-01-01
相关资源
最近更新 更多