根据两个表中的数据添加额外的相同数据行

时间:2018-01-18 21:20:51

标签: sql sql-server

是否有一种有效的方法可以使用纯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




结果如下: enter image description here

在这个具体的例子中,我想提出一个可以加入两个临时表的查询,并为“'项目”添加一个缺少相同数据的位置。 2222.所以,我在我的一个临时表(1,2)中有两个位置,在我的另一个临时表中,我有Item 1111的两个位置,但是ItemId 2222只有一个位置(2)。我正在寻找一个加入/查询将添加额外的行,具有相同的数据(只是不同,新的Loc)。在我的例子中,新行将是(1,2222,x)。这样的事情是否可行?

更具体地说,这是一张图片:

enter image description here

我们有4个不同的位置,只有第一个SKU填充了这4个位置。由于数据库中没有其他SKU的数据(在本例中),我想填充缺少位置的所有其他SKU。显然,涉及更多的列。

以下是它应该输出的内容:

enter image description here

1 个答案:

答案 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;