如何查询每个经销商每天的销量?

来源:百度知道 编辑:UC知道 时间:2024/06/22 15:16:01
现有销量表Sale 字段 CompanyID,BillDate,Amount
经销商表Company 字段 CompanyID,CompanyName
临时时间表 #tmp 字段 BillDate 存放用户输入时间段之间每一天的数据
数据库SQL Server 2008
如何计算一个时间段之间每个经销商每天的销量,如果当天没有销量则显示为0,注意重点,不是每个经销商每天都有数据。
我写的SQL语句:
select CompanyName,t.BillDate,ISNULL(sum(sd.Amount),0) as Amount from
(select tc.CompanyName,sd.BillDate,ISNULL(sum(sd.TotalAmount),0) Amount from SEDo sd
right join Company tc on sd.CompanyID=tc.CompanyID
group by tc.CompanyName,sd.BillDate) sd
right join #tmp t on sd.BillDate=t.BillDate
order by t.BillDate

执行时不是经销商名称为Null就是BillDate为Null,呼唤高手。
上面的SQL语句中表名SEDo应为Sale,不影响题目的原意
---------------------------------------------------
回一楼,出来的结果跟我上面写的SQL语句的结果是一样的。
-----------------------------------------------------
回2楼,Inner Join 和 Left Join这里都不能实现的,还有你的那个where isnull(XX)写法有问题。
--------------------------------------------------------
回3楼,你的写法也不对,既然我想查每一天和所有经销商,把销售表放在左边的话那就必须是right join了

select companyname,#tmp.billdate,amount
from #tmp left join (select companyname,billdate,sum(isnull(amount,0)) amount from company tc left join sale sl on tc.CompanyID=sl.CompanyID group by tc.CompanyID,tc.billdate) t on #tmp.billdate = t.billdate.

没有数据验证。你试试吧。我比较习惯left join

Select A.CompanyName,Isnull(T.BillDate,getdate()),ISNULL(sum(T.Amount),0) as Amount from Company A
Left Join
(Select A.CompanyID,A.BillDate,A.Amount From Sale A Join #tmp B
On A.BillDate = B.BillDate
)T
On A.CompanyID = T.CompanyID

因为不是每天都有数据,所以总量会为null,同样BillDate也自然会为null,这里帮你处理为现在的日期。

select CompanyName,BillDate,ISNULL(sum(Amount),0) as Amount from
(select tc.CompanyName CompanyName,sd.BillDate BillDate,ISNULL(sum(sd.TotalAmount),0) Amount from SEDo sd
inner join Company tc on sd.CompanyID=tc.CompanyID
left join #tmp t on sd.BillDate=t.BillDate
group by tc.CompanyName,sd.BillDate
order by t.BillDate) sb where isnull(Co