NNN*_*NNN 3 sql t-sql sql-server-2008
我是SQL的初学者,我对Transact-SQL了解不多.
我意识到这是一个新手问题,但我正在寻找一个简单的解决方案.
我有一个表有一些列(locationCode, CustomerCode).
主表
ItemCode locationCode CustomerCode
I001 001001 C001
I002 001002 C001
I003 001001 C002
I004 002001 C002
Run Code Online (Sandbox Code Playgroud)
我想从这个表中选择数据并插入另外两个表.
第一张桌子
firstTblId(autoIncrement) warehouseCode CustomerCode
1 001 C001
2 001 C002
3 002 C002
Run Code Online (Sandbox Code Playgroud)
warehouseCode 是前三个字符的组合 locationCode
第一个表中的数据按照locationCode客户代码的前三个字符进行分组
第二张桌子
secondTblId
(autoIncrement) ItemCode locationCode CustomerCode firstTblId(FK)
1 I001 001001 C001 1
2 I002 001002 C001 1
3 I003 001001 C002 2
4 I004 002001 C002 3
Run Code Online (Sandbox Code Playgroud)
那么,如何通过用SQL选择主表的行来插入第一个表和第二个表?
感谢您的所有回复.
我想你想要的东西如下.临时表@Output将捕获第一个表的插入标识,然后在插入第二个表时可以使用这些标识.
DECLARE @Output TABLE
( FirstTableID INT NOT NULL PRIMARY KEY,
WarehouseCode VARCHAR(3),
CustomerCode VARCHAR(4)
)
INSERT INTO FirstTable (WarehouseCode, CustomerCode)
OUTPUT inserted.FirstTblID, inserted.WarehouseCode, inserted.CustomerCode INTO @Output
SELECT DISTINCT LEFT(LocationCode, 3) [WarehouseCode], CustomerCode
FROM [PrimaryTable]
INSERT INTO SecondTable (ItemCode, LocationCode, CustomerCode, FirstTblID)
SELECT p.ItemCode,
p.LocationCode,
p.CustomerCode,
o.FirstTableID
FROM [PrimaryTable] p
INNER JOIN @Output o
ON LEFT(LocationCode, 3) = WarehouseCode
AND p.CustomerCode = o.CustomerCode
Run Code Online (Sandbox Code Playgroud)