Case Statement IN SQL Server 中的条件

And condition in Case Statement IN SQL Server

我有下面的 sql..@FeeType 是存储过程的参数..调用下面的逻辑时出现错误..如果我删除 and 条件并创建逻辑只是

WHEN ''ItemDesc'' THEN ''Item Description1''

然后逻辑工作正常..有人可以看看并让我知道我在这里做错了什么。

SELECT @FIELDS = (COALESCE(@FIELDS, '' '','''') + ''<td style='' + 
                  ''"border:1px solid   black;color:white">'' +
                  (CASE name 
                  WHEN ''ItemDesc'' and '+ @FeeType +' = ''1'' THEN ''Item Description1''
                  WHEN ''ItemDesc'' and '+ @FeeType +' = ''2'' THEN ''Item Description2''
                  WHEN ''Units'' THEN ''Units'' 
                  WHEN ''Rate'' THEN ''Rate''
                  WHEN ''Frequency'' THEN ''Frequency''
                  WHEN ''Annual'' THEN ''Annual''
                  WHEN ''BasedOn'' THEN ''Based On'' ELSE ''Misc'' END) +  ''</td>'' 
                 )

FROM tempdb.sys.Columns
WHERE object_id=object_id(''tempdb..#FeesCalculation'')
AND name not like ''CustColHTML_ID'' 
AND name not like ''ItemID'' 

谢谢

因为CASE有两种可能的语法:

  1. CASE variable WHEN value1 THEN expression2 WHEN value2 THEN expression2 [...] ELSE expression3 END
  2. CASE WHEN condition1 THEN expression1 ELSE expression2 END

第一个是当您只需要比较值时。如果您需要任何更复杂的逻辑,您应该使用第二个选项。在您的情况下,您似乎可以使用第一种语法中的两种组合。

所以,您需要做的是:

SELECT @FIELDS = (COALESCE(@FIELDS, '' '','''') + ''<td style='' + 
                  ''"border:1px solid   black;color:white">'' +
                  (CASE name 
                  WHEN ''ItemDesc'' THEN CASE @FeeType WHEN ''1'' THEN ''Item Description1'' WHEN ''2'' THEN ''Item Description2'' END
                  WHEN ''Units'' THEN ''Units'' 
                  WHEN ''Rate'' THEN ''Rate''
                  WHEN ''Frequency'' THEN ''Frequency''
                  WHEN ''Annual'' THEN ''Annual''
                  WHEN ''BasedOn'' THEN ''Based On'' ELSE ''Misc'' END) +  ''</td>'' 
                 )

您可能需要修复连接和引号,为了简单起见,我删除了它们。