我当前查询的一部分是这个CASE WHEN语句:
CASE WHEN SUBSTRING(article_code,1,4) IN ('Ak42','Ales','AlHe','Artu','Behr','Crea','Digi','Egos','Emu_','Fend','Fen2','GiSt',Icon','InMa','Korg','Lin6','Li6S','MAud','MGtr','Mack','Nova','Focu','NoLa','NoLM','Relo','Tasc','TC_E','Vest','Xona','Xpre','Zoom','SndC','LtGn')
THEN 'X' ELSE 'Y' END AS lup
这不仅难以阅读/格式化它还有一个基本缺陷,即IN
运算符中包含的值列表不是静态的而是动态的。由于数据库中不包含这样的lookup_table,这不太可能改变,我想知道是否有可能创建一个看起来像这样的临时表......:
AC
...然后将AC列中的值用作IN
运算符的值,例如:
CASE WHEN SUBSTRING(article_code,1,4) IN (temp_table) THEN 'X' ELSE 'Y' END AS lup
甚至可以以这种方式使用IN
运算符?
如果那是不可能的,也许还有另一种解决方案。
答案 0 :(得分:1)
是。语法是:
(CASE WHEN SUBSTRING(article_code,1,4) IN (select article_code from temp_table) THEN 'X'
ELSE 'Y'
END) AS lup
为获得最佳性能,请创建以article_code
为主键的表,或在其上创建索引。