我如何使用T-SQL的Case/When?

gra*_*ady 43 t-sql case-when

我有一个巨大的查询,经常使用case /.现在我在这里有这个SQL,它不起作用.

 (select case when xyz.something = 1
 then
     'SOMETEXT'
 else
      (select case when xyz.somethingelse = 1)
      then
          'SOMEOTHERTEXT'
      end) 

      (select case when xyz.somethingelseagain = 2)
      then
          'SOMEOTHERTEXTGOESHERE'
      end)
 end) [ColumnName],
Run Code Online (Sandbox Code Playgroud)

造成麻烦的是xyz.somethingelseagain = 2,它说无法绑定那个表达.xyz是表的一些别名,它在查询中进一步连接.这里有什么不对?删除2个案例/小时中的一个纠正了这个,但我需要它们两个,可能更多的情况.

Flo*_*chl 93

SELECT
   CASE 
   WHEN xyz.something = 1 THEN 'SOMETEXT'
   WHEN xyz.somethingelse = 1 THEN 'SOMEOTHERTEXT'
   WHEN xyz.somethingelseagain = 2 THEN 'SOMEOTHERTEXTGOESHERE'
   ELSE 'SOMETHING UNKNOWN'
   END AS ColumnName;
Run Code Online (Sandbox Code Playgroud)

  • 让我说我有一些重复,像这样:当xyz.something = 1和xyz.abc = 2然后'SOMETEXT'当xyz.something = 1和xyz.abc <> 2那么'SOMEOTHERTEXT'我能以某种方式如果第一次设置即将跳过即将到来的那些?什么东西逃脱的情况/什么时候? (4认同)

小智 8

WHEN语句一旦为真,则中断是隐含的.

你必须得到一个最有可能发生的表达式.如果你将WHEN放在WHEN语句的长列表的末尾,那么你的sql可能会变慢.所以把它放在第一位.

更多信息:在T-SQL中打破case语句