Sql 合并并求和加倍结果
我有两张桌子,t_tran_log和t_item_master 当我对t_tran_log运行此查询时,我得到了准确的结果:Sql 合并并求和加倍结果,sql,join,sum,left-join,Sql,Join,Sum,Left Join,我有两张桌子,t_tran_log和t_item_master 当我对t_tran_log运行此查询时,我得到了准确的结果: declare @startdate as datetime; declare @enddate as datetime set @startdate = '9/13/20 5am'; set @enddate = dateadd(hour,24,@startdate) select cast(t.start_tran_date+t.start_tran_time -
declare @startdate as datetime; declare @enddate as datetime
set @startdate = '9/13/20 5am'; set @enddate = dateadd(hour,24,@startdate)
select
cast(t.start_tran_date+t.start_tran_time - '1900-01-01 05:00' as date) tran_date
,t.item_number
,sum(t.tran_qty) qty
from t_tran_log t
where t.start_tran_date+t.start_tran_time >= @startdate
and t.start_tran_date+t.start_tran_time < @enddate
and t.tran_type = '750' and t.description like 'Customer Return' and t.hu_id not like '1Z%'
group by cast(t.start_tran_date+t.start_tran_time - '1900-01-01 05:00' as date), t.item_number
但是,当我试图通过左联接从另一个表中引入额外的项目详细信息时,我突然得到了项目数量的两倍结果!我做错了什么
declare @startdate as datetime; declare @enddate as datetime
set @startdate = '9/13/20 5am'; set @enddate = dateadd(hour,24,@startdate)
select
cast(t.start_tran_date+t.start_tran_time - '1900-01-01 05:00' as date) Date
,t.item_number
,i.dept_name
,i.class_name
,i.subclass_name
,sum(t.tran_qty) qty
from t_tran_log t
left join t_item_master i on t.item_number = i.item_number
where t.start_tran_date+t.start_tran_time >= @startdate
and t.start_tran_date+t.start_tran_time < @enddate
and t.tran_type = '750' and t.description like 'Customer Return' and t.hu_id not like '1Z%'
group by cast(t.start_tran_date+t.start_tran_time - '1900-01-01 05:00' as date), t.item_number, i.dept_name, i.class_name, i.subclass_name
在item_master中可能有多行与联接条件匹配。结果,行被相乘,聚合函数出错 首先考虑在子查询中预聚合:
select t.*, i.dept_name, i.class_name, i.subclass_name
from (
select
cast(t.start_tran_date+t.start_tran_time - '1900-01-01 05:00' as date) tran_date
,t.item_number
,sum(t.tran_qty) qty
from t_tran_log t
where
t.start_tran_date + t.start_tran_time >= @startdate
and t.start_tran_date+t.start_tran_time < @enddate
and t.tran_type = '750'
and t.description like 'Customer Return'
and t.hu_id not like '1Z%'
group by
cast(t.start_tran_date+t.start_tran_time - '1900-01-01 05:00' as date),
t.item_number
) t
left join t_item_master i on t.item_number = i.item_number
简短回答:您执行多对多连接而不是1对多连接,即“t_item_master”。item_number'不是唯一的抱歉,这不太有效。现在我得到了每个项目编号的两行结果?