查看当前 SSRS 迁移的存储过程。我注意到下面列出的临时表 (#tempShip) 的 case 语法对临时表中的“ord_status”列没有影响。为临时表收集数据的存储过程相当庞大,因此我将避免发布。但我相信,通过为更新提供的代码,它可能会提供一些理由。
问题:
您可以利用临时表上的 case 语句作为更新吗?
除了案例陈述之外,我还应该尝试另一种方法吗?(我不认为使用带有“IF”或“WHERE EXISTS with a select statement”的子查询会对此有所帮助)
笔记:
***存储过程执行没有任何错误,临时表按预期填充数据(但使用 case 语句更新没有预期结果)
***通过做一个简单的案例陈述,如下所示,翻译发生得很好
用于测试临时表中 ord_status 数据的用例转换的基本查询。输出正确
select ord_status,
CASE
WHEN RTRIM([ord_status]) = 'N' THEN 'New'
WHEN RTRIM([ord_status]) = 'Q' THEN 'Printed'
WHEN RTRIM([ord_status]) = 'P' THEN 'Picked'
ELSE ''
END
from #tempShip
***正在更新临时表的存储过程结束
UPDATE [#tempShip] SET
[#tempShip].[DUP] = 1,
[#tempShip].[ord_status] =
CASE
WHEN RTRIM([ord_status]) = 'N' THEN 'New'
WHEN RTRIM([ord_status]) = 'Q' THEN 'Printed'
WHEN RTRIM([ord_status]) = 'P' THEN 'Picked'
ELSE ''
END
FROM #tempShip
INNER JOIN
(
SELECT X.order_N_ext, COUNT(X.order_N_ext) AS dup
FROM #tempShip AS X
GROUP BY X.order_N_ext
) AS Y
ON #tempShip.order_N_ext = Y.order_N_ext
WHERE Y.dup > 1;
----- -- mbs 3/30/2017 #22844 - add parameter @ship_type
SELECT * FROM #tempShip
WHERE ship_type LIKE @ship_type
-------<<<
END
DROP TABLE #tempShip
**order_N_ext
SELECT O.order_no
, O.ext
, CONVERT(varchar(20), O.order_no) + ' - ' + CONVERT(varchar(2), O.ext)
AS 'order_N_ext'
数据示例:
Ord_Num BD order_N_ext Loc Cust Ship_date Ord_Status
1252868 1 1252868 - 1 RAS HQ 21115 2017-04-19 00:00:00.000 2570.63 P
1253995 1 1253995 - 1 RAS HQ 11471 2017-04-19 00:00:00.000 1270.45 Q
1254526 0 1254526 - 0 RAS HQ 24104 2017-04-19 00:00:00.000 2214.67 P
这是解决方案:(更新语句必须重新排列,以便它们自己执行。)
要回答您编号的问题:
CASE
是的,您可以在更新行时使用语句。根据问题中的原始代码,您是:
order_n_ext
值);ship_type
;从 #tempship 中选择记录 和#tempship
。如果碰巧没有两行具有相同的
order_n_ext
,或者如果确实存在这样的行但没有ship_type
你正在SELECT
退出临时表,那么该UPDATE
语句将完美运行,但你不会看到它.注意:从您的回答中,您最终发现您有两个不同的
UPDATE
语句已合并为一个:ord_status
所有行#tempship
以显示完整的单词而不是一个字母的缩写;和dup
将列更新为出现在多于一行1
的所有行。#tempship
order_N_ext
合并仅导致重复行的
ord_status
值更新。您的解决方案将其
UPDATE
分成两个单独的语句,几乎可以肯定是最清晰的解决方案。但是,可以用一个UPDATE
语句来做到这一点:这将设置
#tempship.dup
为该行1
中有 2 行或更多行#tempship
的位置order_n_ext
,并且如果只有 1 行,则将其设置为已经存在的任何内容。(添加答案以整合我评论中的信息)。