【问题标题】:Select from one table and insert to another two table从一个表中选择并插入另外两个表
【发布时间】:2012-03-30 08:38:15
【问题描述】:

我是 SQL 初学者,对 Transact-SQL 了解不多。

我意识到这是一个新手问题,但我正在寻找一个简单的解决方案。

我有一个包含一些列的表格 (locationCode, CustomerCode)。

主表

    ItemCode    locationCode    CustomerCode
    I001        001001          C001 
    I002        001002          C001    
    I003        001001          C002
    I004        002001          C002

我想从这个表中选择数据并插入到另外两个表中。

第一张桌子

firstTblId(autoIncrement)  warehouseCode  CustomerCode
       1                       001           C001   
       2                       001           C002
       3                       002           C002

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

那么,如何通过 SQL 选择主表的行来插入第一个表和第二个表?

感谢您的所有回复。

【问题讨论】:

  • 我可以使用 insert second table(colums,..) select primary table 插入第二个表
  • 您可以编辑您的帖子并在其中插入您的代码,这样看起来会更容易 =)
  • 能否将主表的主键插入“第一表”?否则,我认为您无法选择正确的行(或至少保证它是唯一的)...

标签: sql sql-server-2008 tsql


【解决方案1】:

我想你想要像下面这样的东西。临时表@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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-17
    • 1970-01-01
    相关资源
    最近更新 更多