0

我当前查询的一部分是这个 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,而且这不太可能改变,我想知道是否可以创建一个看起来像这样的临时表......:

交流电

  • 英玛
  • 雷洛
  • 飞涨
  • ETC..

...然后将 AC 列中的这些值用作IN运算符的值,例如:

CASE WHEN SUBSTRING(article_code,1,4) IN (temp_table) THEN 'X' ELSE 'Y' END AS lup

甚至可以以IN这种方式使用运算符?如果这不可能,也许还有另一种解决方案。

4

1 回答 1

1

是的。语法是:

(CASE WHEN SUBSTRING(article_code,1,4) IN (select article_code from temp_table) THEN 'X'
      ELSE 'Y'
 END) AS lup

为获得最佳性能,请使用article_code主键创建表或在其上创建索引。

于 2014-05-23T11:45:40.707 回答