我需要使用CASE WHEN语句返回的值运行UPDATE脚本。使用的条件可能导致具有不同的erorrs所指示的相同顺序(表ORDER)。
例如,order.id = 20可能会受到错误1和错误2的影响,但是我只需要使用值Error 1更新它(CASE WHEN中的顺序显示优先级)。
目标是只在字段STATUS中设置错误1。这可能在TSQL中实现吗?或者我应该用控制台应用程序更好地实现逻辑?
感谢。
UPDATE O
SET STATUS = (
CASE
WHEN E.EXPID = 'E1' THEN 'Error1'
WHEN E.EXPID = 'E3' THEN 'Error2'
WHEN E.EXPID = 'E2' THEN 'Error3'
ELSE 'EX'
END )
FROM ORDER O
INNER JOIN EXCP E ON O.ID = E.ORDERID
答案 0 :(得分:1)
我会使用CTE来获取您的订单表中的顶部“错误”和join
。
;WITH TopError
AS
(
SELECT ROW_NUMBER() OVER(PARTITION BY OrderID ORDER BY ExpID ASC) AS ROWID, *
FROM Excp
)
SELECT *
-- UPDATE O SET STATUS = CASE WHEN T.EXPID = 'E1' THEN 'Error1' WHEN T.EXPID = 'E2' THEN 'Error2' WHEN T.EXPID = 'E3' THEN 'Error3' ELSE 'EX' END
FROM TopError T
JOIN Order O
ON T.ORDERID = O.ID
WHERE T.ROWID=1
尝试SELECT
,如果您对结果感到满意,请切换为UPDATE
。