Transact-SQL强制加入?

时间:2017-05-24 16:04:28

标签: sql sql-server tsql join sql-server-2012

我尝试创建一个静态行数的报告。

表#1字段#1是我们目前销售的所有商品的列表。 表#2字段#1我们列出了我们销售的所有地点。 表#3包含所有销售日期,包括项目编号和位置代码

我目前有一个选择给我一个列出所有不同的项目编号(让我们说1000个)

在我离开之前加入表#3中的销售数据我希望找到一种方法来增加行数,并为每个项目的每个位置创建一个明确的行。

即。如果我有1000个项目和10个位置,我想拥有10,000行,这样我就可以将加入销售日期保留为项目编号&位置代码。我想这样,所以即使没有销售数据,我也会有一排。

由于我们没有销售每个地点的每个商品,因此销售表中的左连接无法实现此目的。 **此外,带位置的表没有与要加入ON的项目表的公共字段。是否有不同类型的JOIN或不同的SQL函数来实现此目的?

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用cross joinleft join。例如,总结销售额:

select i.itemid, l.locationid, sum(t.sales)
from items i cross join
     locations l left join
     table3 t
     on i.itemid = t.itemid and l.locationid = t.locationid
group by i.itemid, l.locationid
order by i.itemid, l.locationid;

如果table3中只有一行,则无需进行聚合。