【发布时间】:2015-03-30 10:18:45
【问题描述】:
我有两个数据集:DS_A 和 DS_B。
我的问题是为什么pro_id 71549 有两个数量而不是三个?
ALL 将所有行合并到结果中。这包括重复项。如果未指定,则删除重复的行。
loc_id pro_id quantity price
------------- ----------- ----------- -----------
2310 5052 1 0
2365 5433 1 0
2310 7694 1 0
2310 9480 1 0
2310 9502 1 0
2310 14413 1 0
2310 31277 1 0
2310 46180 1 0
2310 65233 1 0
2310 68369 1 0
2310 68372 1 0
2310 77396 1 0
loc_id pro_id quantity price
------------- ----------- ----------- -----------
2310 71549 0.15 0
当我做我的UNION ALL:
declare @tax float
set @tax = 0.05
select loc_id
, pro_id
, sum(quantity)
, price
from DS_A
group by loc_id, pro_id
UNION ALL
select 2310
, 71549
, case when sum(quantity)<>0 Then sum(quantity/ @tax) Else 0 End
, price
from DS_B
group by pro_id, loc_id
结果:
loc_id pro_id quantity price
------------- ----------- ----------- -----------
2310 5052 1 0
2365 5433 1 0
2310 7694 1 0
2310 9480 1 0
2310 9502 1 0
2310 14413 1 0
2310 31277 1 0
2310 46180 1 0
2310 65233 1 0
2310 68369 1 0
2310 68372 1 0
2310 77396 1 0
2310 71549 2 0
【问题讨论】:
-
这不可能发生。 UNION/UNION ALL 在任何情况下都不会更改数据。您的查询中有一些您没有向我们展示的内容导致了这种情况,或者您错误地读取了您的数据并且您完全弄错了。
-
你确定这是整个查询吗?
-
我在两个查询中都有一个总和(数量),但这会返回一个二
-
DS_A 和 DS_B 都包含多个连接和业务逻辑
-
问题可能是查询和已完成的任何舍入(尤其是整数数学会导致这些问题),或者它可能出现在某个其他表具有 1 多或多对多的连接中关系。如果没有数据模型、所有表中的样本数据以及 union all 和原始查询的整个查询,我们如何为您提供帮助?
标签: sql sql-server tsql sql-server-2005