Sql server 如何创建适当的UPDATE语句

Sql server 如何创建适当的UPDATE语句,sql-server,sql-update,Sql Server,Sql Update,我必须用表B序列字段中的值更新表A中的Lseq字段 ID | OrderNumber | Lseq | SKU | CustOrdNumber ----+--------------+------+------+--------------- 523 | DTCI102597-A | | C123 | 102597-RPI 524 | DTCI102597-A | | C123 | 102597-RPI 525 | DTCI102597-A | | C123

我必须用表B序列字段中的值更新表A中的Lseq字段

ID  | OrderNumber  | Lseq | SKU  | CustOrdNumber
----+--------------+------+------+---------------
523 | DTCI102597-A |      | C123 | 102597-RPI
524 | DTCI102597-A |      | C123 | 102597-RPI
525 | DTCI102597-A |      | C123 | 102597-RPI
表A

ID  | OrderNumber  | Lseq | SKU  | CustOrdNumber
----+--------------+------+------+---------------
523 | DTCI102597-A |      | C123 | 102597-RPI
524 | DTCI102597-A |      | C123 | 102597-RPI
525 | DTCI102597-A |      | C123 | 102597-RPI
表B

ID  | OrderNumber  | Lseq | SKU  | CustOrdNumber
----+--------------+------+------+---------------
523 | DTCI102597-A |      | C123 | 102597-RPI
524 | DTCI102597-A |      | C123 | 102597-RPI
525 | DTCI102597-A |      | C123 | 102597-RPI
ID  | order_no     | seq   | sku
----+--------------+-------+---------
201 | DTCI102597-A | 16384 | C123
202 | DTCI102597-A | 32768 | C4302716
203 | DTCI102597-A | 49152 | C123
204 | DTCI102597-A | 65536 | C4302716
205 | DTCI102597-A | 81920 | C123
206 | DTCI102597-A | 98304 | C4302720
我的最终结果应该是

ID  | OrderNumber  | Lseq | SKU  | CustOrdNumber
----+--------------+------+------+---------------
523 | DTCI102597-A |      | C123 | 102597-RPI
524 | DTCI102597-A |      | C123 | 102597-RPI
525 | DTCI102597-A |      | C123 | 102597-RPI
表A

ID  | OrderNumber  | Lseq | SKU  | CustOrdNumber
----+--------------+------+------+---------------
523 | DTCI102597-A |      | C123 | 102597-RPI
524 | DTCI102597-A |      | C123 | 102597-RPI
525 | DTCI102597-A |      | C123 | 102597-RPI
ID  | OrderNumber  | Lseq  | SKU  | CustOrdNumber
----+--------------+-------+------+--------------
523 | DTCI102597-A | 16384 | C123 | 102597-RPI
524 | DTCI102597-A | 49152 | C123 | 102597-RPI
525 | DTCI102597-A | 81920 | C123 | 102597-RPI
这是我当前的脚本,它不工作,它不会返回所有的Lseq数字

ID  | OrderNumber  | Lseq | SKU  | CustOrdNumber
----+--------------+------+------+---------------
523 | DTCI102597-A |      | C123 | 102597-RPI
524 | DTCI102597-A |      | C123 | 102597-RPI
525 | DTCI102597-A |      | C123 | 102597-RPI
UPDATE TABLE_A
SET LSeq = B.seq
FROM TABLE_B as B
INNER JOIN TABLE_A AS A ON A.OrderNumber = B.ORDER_NO
                        AND A.sku = B.sku

由于您的OrderNumber/SKU组合不是唯一的,因此需要某种方式将其行号上的行连接起来。表A中的第一个ID需要与表B中的第一个ID匹配,表A中的第二个ID需要与表B中的第二个ID匹配,以此类推

ID  | OrderNumber  | Lseq | SKU  | CustOrdNumber
----+--------------+------+------+---------------
523 | DTCI102597-A |      | C123 | 102597-RPI
524 | DTCI102597-A |      | C123 | 102597-RPI
525 | DTCI102597-A |      | C123 | 102597-RPI
实现这一点的一种方法是使用窗口功能

ID  | OrderNumber  | Lseq | SKU  | CustOrdNumber
----+--------------+------+------+---------------
523 | DTCI102597-A |      | C123 | 102597-RPI
524 | DTCI102597-A |      | C123 | 102597-RPI
525 | DTCI102597-A |      | C123 | 102597-RPI
比如说,

ID  | OrderNumber  | Lseq | SKU  | CustOrdNumber
----+--------------+------+------+---------------
523 | DTCI102597-A |      | C123 | 102597-RPI
524 | DTCI102597-A |      | C123 | 102597-RPI
525 | DTCI102597-A |      | C123 | 102597-RPI
UPDATE A
SET LSeq = B.Seq
FROM
(
    SELECT *,
        RN = ROW_NUMBER() OVER (PARTITION BY OrderNumber, SKU ORDER BY ID)
    FROM tableA
) A
JOIN
(
    SELECT *,
        RN = ROW_NUMBER() OVER (PARTITION BY order_no, SKU ORDER BY ID)
    FROM tableB
) B ON B.SKU = A.SKU 
    AND B.order_no = A.OrderNumber 
    AND B.RN = A.RN; -- First ID joins to first ID, second ID joins to second ID, etc.

我认为按照您当前表格的结构,您需要使用
行编号()
来加入表格。我该怎么做,不要认为我从未使用过行编号功能谢谢您的指导,我将其应用于更大的数据集表格,但没有得到预期的结果。它适用于示例表格,但不适用于真正更大的数据集。我想知道,对于连接的列,这些表格是否需要以某种关系排序?如果没有得到预期的结果,这可能是因为一个表中的记录数与另一个表中的记录数不同。如果没有对唯一的对象(如ID)进行显式连接,当表中的数据不一定对齐时,就很难执行此类操作。谢谢,我认为这是因为两个表不相等。我将要做的是创建一个临时表,每个表中都有RN字段,我可以在其中加入它们并执行UPDATE语句