Sql 在插入表的视图中迭代
我有一张客户订单表。如果相关发票上存在产品,我需要将其插入采购订单。很多事情都依赖于采购订单表中的数据,所以我所能做的就是构建视图来帮助插入 查看最大值,获取必须随每次插入而递增的字段的MAX()+1Sql 在插入表的视图中迭代,sql,sql-server,sql-server-2008,tsql,Sql,Sql Server,Sql Server 2008,Tsql,我有一张客户订单表。如果相关发票上存在产品,我需要将其插入采购订单。很多事情都依赖于采购订单表中的数据,所以我所能做的就是构建视图来帮助插入 查看最大值,获取必须随每次插入而递增的字段的MAX()+1 NextSalesOrder FIFOID ChangeID NextPO --------------------------------------------- 102515 300005 26665 1234 我构建了
NextSalesOrder FIFOID ChangeID NextPO
---------------------------------------------
102515 300005 26665 1234
我构建了需要插入到采购订单中的产品的另一个视图
Invoice Product ChangeID
---------------------------------
102515 105 26665
102516 144 26665
102517 105 26665
我需要将所有3个值都插入到采购订单表中,但每个值的ChangeID都必须递增。我无法更改表架构
INSERT INTO [Purchase Order] (Invoice, Product, ChangeID)
SELECT TOP(1) T1.Invoice, T1.Product, T2.ChangeID
FROM dbo.[Invoice] T1, dbo.[Maxes] T2
只要我使用TOP(1),上面的代码就可以正常工作,但是我需要一种方法来迭代[Invoice]视图的所有记录,同时增加ChangeID
我看到了两种实现我需要的方法
谢谢。您可以使用排名函数对行进行排名,并在查询中使用它。如果发票视图中已有
ChangeId
,则无需使用Maxes视图进行另一次连接
INSERT INTO [Purchase Order] (Invoice, Product, ChangeID)
SELECT Invoice
,Product
,ROW_NUMBER() OVER(PARTITION BY ChangeID ORDER BY ChangeID) + ChangeId - 1
FROM dbo.[Invoice]
这部分ROW_NUMBER()(按ChangeID划分,按ChangeID排序)+ChangeID-1
为每个ChangeID
提供一个行号,然后将其添加到ChangeID,并从结果中减去1
样本使用
DECLARE @tbl TABLE (Invoice INT, Product INT, ChangeID INT)
INSERT @tbl
SELECT 102515, 105 , 26665 UNION ALL
SELECT 102516 , 144 , 26665 UNION ALL
SELECT 102517 , 105, 26665
SELECT * FROM @tbl
SELECT ROW_NUMBER() OVER(PARTITION BY ChangeID ORDER BY ChangeID) + ChangeId - 1 NewChangeId
,ChangeId
FROM @tbl
输出
NewChangeId ChangeId
26665 26665
26666 26665
26667 26665
正是我需要的。非常感谢。