是否有一种有效的方法可以使用纯sql基于与另一个表的连接向一个临时表添加缺失数据。
这是一个非常简单的例子:
declare @t1 table (LocId int, ItemId int, SomeData nvarchar(max))
insert into @t1 VALUES (1, 1111, 'x')
insert into @t1 VALUES (2, 1111, 'x')
insert into @t1 VALUES (2, 2222, 'x')
select * from @t1
declare @t2 table (LocId int)
insert into @t2 VALUES(1)
insert into @t2 VALUES(2)
select * from @t2
select * from @t1 t1
left join @t2 t2 on t1.LocId = t2.LocId

在这个具体的例子中,我想提出一个可以加入两个临时表的查询,并为“'项目”添加一个缺少相同数据的位置。 2222.所以,我在我的一个临时表(1,2)中有两个位置,在我的另一个临时表中,我有Item 1111的两个位置,但是ItemId 2222只有一个位置(2)。我正在寻找一个加入/查询将添加额外的行,具有相同的数据(只是不同,新的Loc)。在我的例子中,新行将是(1,2222,x)。这样的事情是否可行?
更具体地说,这是一张图片:
我们有4个不同的位置,只有第一个SKU填充了这4个位置。由于数据库中没有其他SKU的数据(在本例中),我想填充缺少位置的所有其他SKU。显然,涉及更多的列。
以下是它应该输出的内容:
答案 0 :(得分:0)
with
locations as (select distinct LocId from T),
items as (select distinct ItemId from T)
select l.LocId, i.ItemId, t.SomeData
from
locations as l cross join items as i
left outer join T as t
on t.LocId = l.LocId and t.ItemId = i.ItemId;