Tsql 如何使用T-SQL';什么时候?

Tsql 如何使用T-SQL';什么时候?,tsql,case-when,Tsql,Case When,我有一个巨大的查询,经常使用case/when。现在我这里有一个SQL,它不工作 (select case when xyz.something = 1 then 'SOMETEXT' else (select case when xyz.somethingelse = 1) then 'SOMEOTHERTEXT' end) (select case when xyz.somethingelseagain

我有一个巨大的查询,经常使用case/when。现在我这里有一个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],

引起麻烦的是
xyz.somethingelseather=2
,它说它无法绑定该表达式。xyz是在查询中进一步连接的表的别名。这里怎么了?删除两个case/WHEN中的一个可以纠正这一点,但我需要两个case/WHEN,可能需要更多的case。

WHEN语句一为真,中断就隐式存在

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;
你必须在最有可能出现的表达方式下进行排序。如果您将WHEN放在一长串whe语句的末尾,那么您的sql可能会变慢。所以把它放在前面作为第一个


此处的更多信息:

如果逻辑测试针对单个列,则可以使用

USE AdventureWorks2012;  
GO  
SELECT   ProductNumber, Category =  
      CASE ProductLine  
         WHEN 'R' THEN 'Road'  
         WHEN 'M' THEN 'Mountain'  
         WHEN 'T' THEN 'Touring'  
         WHEN 'S' THEN 'Other sale items'  
         ELSE 'Not for sale'  
      END,  
   Name  
FROM Production.Product  
ORDER BY ProductNumber;  
GO  

更多信息-

有效,有什么区别吗?:)假设我有一些WHEN是重复的,比如:当xyz.something=1和xyz.abc=2时,然后是“SOMETEXT”,当xyz.something=1和xyz.abc=2时,然后是“SOMEOTHERTEXT”,如果设置了第一个WHEN,我能说跳过即将到来的WHEN吗?逃避案件/何时发生的事情?很多时候都是这样,但不能保证:
USE AdventureWorks2012;  
GO  
SELECT   ProductNumber, Category =  
      CASE ProductLine  
         WHEN 'R' THEN 'Road'  
         WHEN 'M' THEN 'Mountain'  
         WHEN 'T' THEN 'Touring'  
         WHEN 'S' THEN 'Other sale items'  
         ELSE 'Not for sale'  
      END,  
   Name  
FROM Production.Product  
ORDER BY ProductNumber;  
GO