我有一个长长的清单:
update wi
SET class
case
WHEN wi.column = 'a' THEN (select top 1 from lookup_tbl1 where code = 1)
WHEN wi.column = 'b' THEN (select top 1 from lookup_tbl1 where code = 2)
WHEN wi.column = 'c' THEN (select top 1 from lookup_tbl1 where code = 3)
WHEN wi.column = 'd' THEN (select top 1 from lookup_tbl1 where code = 80)
end
SET name
case
WHEN wi.column2 = 'Chris' THEN (select top 1 from table1 where code = 1)
WHEN wi.column2 = 'david' THEN (select top 1 from table1 where code = 2)
WHEN wi.column2 = 'tan' THEN (select top 1 from table1 where code = 3)
WHEN wi.column2 = 'drake' THEN (select top 1 from table1 where code = 80)
WHEN wi.column2 = 'x' THEN ..........
end
SET department
case
WHEN wi.column3 like 'd.d%' then 'Director D'
WHEN wi.column3 like '%AC' then 'Accounting'
end
FROM transform_tbl wi WHERE flag is null
我在清理table。我需要用实际名称替换缩写,并修复该表中的数据。有没有别的办法或者更好的办法?
3条答案
按热度按时间koaltpgm1#
你可以移动
case
到子查询,如下所示:笔记:
子查询中缺少实际列的位置
select
条款;我以为col
进一步的优化可能是可能的,但是您需要向我们展示您的整个查询,并解释它的意图—您可能需要为此提出一个新问题disho6za2#
如果你有索引
table1(code)
,你的方法可能是好的。好吧,这不是因为它在语法上是不正确的。子查询需要选择一些内容。也就是说,我会重新构造代码,这样在
code
以及column
. 例如,table1
也许应该有识别行的字母。这将大大简化查询:不
case
需要表达。vlf7wbxs3#
最好的选择是为这个单独的表,可以Map
column
值到code
值,可能带有索引。然后你就可以加入它而不需要复杂的case
表情。但如果做不到这一点,可以使用表值构造函数创建Map:
或者,考虑到
top 1
,您可能需要apply
:但正如在其他答案中所说的,我们需要知道你在找什么栏目。
最后,由于我们没有完整的原始查询,我无法确切地告诉您如何将其与其余代码集成,甚至无法告诉您是否需要
INNER
或者LEFT
加入。