SELECT语句中的CASE和THEN中的多个表达式

时间:2014-05-14 15:20:30

标签: sql-server database sql-server-2008

CASE语法。

SELECT 
   ID,
   CASE 
      WHEN ID != 2 THEN 'Others'
      ELSE ColorName
   END AS Name
FROM ColorTable

这给了我以下结果:

ID - Name 
1 - Others
2 - Red
3 - Others
4 - Others

我的要求是将'其他'增加一个值:

ID - Name 
1 - (1)Others
2 - Red
3 - (2)Others
4 - (3)Others

我尝试过以下代码,但失败了:

DECLARE @Count INT = 1
SELECT 
   ID,
   CASE 
      WHEN ID != 2 THEN '(' + CONVERT(varchar(10), @Count)   + ')Others' SET @Count = @Count + 1
      ELSE ColorName
   END AS Name  
FROM ColorTable

有什么建议吗?它将如何产生这样的结果?

1 个答案:

答案 0 :(得分:3)

虽然我同意您应该在表示层中执行此操作,但您可以使用ROW_NUMBER执行此操作:

SELECT 
    CASE WHEN ID = 2 
        THEN ColorName 
        ELSE '(' + CAST(
            ROW_NUMBER() OVER 
            (
                PARTITION BY CASE WHEN ID = 2 THEN 0 ELSE 1 END 
                ORDER BY ID
            ) AS varchar) + ')Others' 
    END AS Name
FROM ColorTable
ORDER BY ID
相关问题