我有3张桌子:
推销员表(包含所有推销员ID号及其名称),周号表(仅包含53个编号条目的表)和包含所有销售额的销售数据表。
我需要所有推销员的所有周数的输出,即使是0也是如此。我可以获得所有周数或所有推销员的列表,但不能同时获取两者。
这是我到目前为止的内容:
SELECT
DATEPART(wk, d1.u_date) as 'Week',
d4.week AS 'AllWeeks',
convert(decimal,d1.U_slsm) as 'Salesman',
S1.SalesmanNum
from [test].[dbo].[@ORDERLOG] D1
right outer join [test].[dbo].[@weekcounter] d4 on (d4.week = DATEPART(wk, d1.u_date) and DATEPART(yy, d1.u_date) > 2014)
full outer join (select salesmannum from EXECUTIVE...Salesman) S1 on convert(decimal,d1.U_slsm) = S1.salesmannum
order by d4.Week, S1.SalesmanNum
即使没有销售(期望),这也给了我全部53周的时间,这给了我所有每周都有销售的推销员(期望的),但它给了我所有没有销售的推销员的一个实例。我每个星期都需要推销员。20个推销员,53周,1060个结果。我究竟做错了什么?还是有更好的方法来做到这一点?
这最终将包括销售数据,但到目前为止我还不能工作...
我尝试了许多无用的连接组合...这在MSSQL 2008 R2中。
如果要销售员和周号的所有组合,则可以cross join
在表之间使用a来生成两组的笛卡尔乘积。
您的查询将类似于以下内容(根据需要调整源表名称):
SELECT
DATEPART(wk, d1.u_date) as 'Week',
all_salesman_weeks.week AS 'AllWeeks',
convert(decimal,d1.U_slsm) as 'Salesman',
all_salesman_weeks.SalesmanNum
from (
select * from
EXECUTIVE...Salesman
cross join
[test].[dbo].[@weekcounter]
) all_salesman_weeks
left join [test].[dbo].[@ORDERLOG] D1
on (all_salesman_weeks.week = DATEPART(wk, d1.u_date) and DATEPART(yy, d1.u_date) > 2014)
and convert(decimal,d1.U_slsm) = all_salesman_weeks.salesmannum
order by all_salesman_weeks.Week, all_salesman_weeks.SalesmanNum
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句