Sql 在同一表中的行之间移动记录

Sql 在同一表中的行之间移动记录,sql,sql-server,sql-server-2012,Sql,Sql Server,Sql Server 2012,我需要按处方将Qty和DaysApply从RXBatch Test1添加到另一个RXBatch Test2,其中patid、facid和ndc匹配。一旦qty和daysuply从test1添加到test2,我需要test1qty和daysuply为零。 下面是我一直在做的工作,但我的脚本只向两个批次添加数量,而不会在添加数量后将数量归零 UPDATE RXS SET QTY=RXS_Totals.Qty_Total FROM FWDB.RX.RXS RXS INNER JOIN ( SEL

我需要按处方将Qty和DaysApply从RXBatch Test1添加到另一个RXBatch Test2,其中patid、facid和ndc匹配。一旦qty和daysuply从test1添加到test2,我需要test1qty和daysuply为零。

下面是我一直在做的工作,但我的脚本只向两个批次添加数量,而不会在添加数量后将数量归零

UPDATE RXS
SET QTY=RXS_Totals.Qty_Total
FROM FWDB.RX.RXS RXS
INNER JOIN (
  SELECT FacID, PatID, NDC, SUM(Qty) AS Qty_Total
  FROM FWDB.RX.RXS
  WHERE RxBatch='test1' OR RxBatch='test2'
  GROUP BY FacID, PatID, NDC
  HAVING MIN(RxBatch) <> MAX(RxBatch)
) AS RXS_Totals ON RXS_Totals.FacID = RXS.FacID AND
  RXS_Totals.PatID = RXS.PatID AND
  RXS_Totals.NDC = RXS.NDC
我想你只需要:

UPDATE RXS
    SET QTY = (CASE WHEN RxBatch = 'test2' THEN RXS_Totals.Qty_Total ELSE 0 END)
    FROM . . .
    WHERE RxBatch IN ('test1', 'test2');

我认为您正在进行自连接,如果是,您可以这样做:

UPDATE rx
SET 
    Qty = (CASE WHEN rx.RxBatch = rx1.RxBatch THEN 0 ELSE rx1.Qty + rx2.Qty END), 
    DaysSupply = (CASE WHEN rx.RxBatch = rx1.RxBatch THEN 0 ELSE rx1.DaysSupply + rx2.DaysSupply END)
FROM RXS rx
LEFT JOIN RXS rx1 ON rx1.RxNo = rx.RxNo AND rx1.RxBatch = 'TEST1'
LEFT JOIN RXS rx2 ON rx2.RxNo = rx.RxNo AND rx2.RxBatch = 'TEST2'
WHERE 
        rx1.PatID = rx2.PatID
    AND rx1.FacID = rx2.FacID
    AND rx1.NDC = rx2.NDC

示例数据和期望的结果将非常有用。我添加了示例数据的图像。网站不允许我显示它。它需要10分的声誉。