2012-02-22 102 views
4

我在SQL需要T-SQL CASE多个条件相同的结果

int caseSwitch = 1; 
switch (caseSwitch) 
{ 
case 1: 
case 2: 
case 3: 
case 4: 
    Console.WriteLine("x"); 
    break; 
default: 
    Console.WriteLine("Default case"); 
    break; 
} 

等价的C#代码我有多个条件,相同的结果 ,我不想写的所有代码

case when cond1 then result1 
    when cond2 then result1 
    when cond3 then result1 
    .... 
    end 

有什么想法? 感谢

回答

8

事情是这样的:

DECLARE @caseSwitch INT=1 
SELECT 
    CASE WHEN @caseSwitch IN (1,2,3,4) 
    THEN 'x' 
    ELSE 'Default case' 
END 

在选择一个表。这将是这样的:

DECLARE @caseSwich INT=1 
SELECT 
    (
     CASE WHEN @caseSwich IN (1,2,3,4) 
      THEN 'x' 
      ELSE 'Default case' 
     END 
    ) AS someColumn 
FROM 
    yourTable 
1
DECLARE @i INT 
SET @i = 2 
SELECT CASE WHEN @i IN (1,2,3,4) THEN 'Hi' ELSE 'HiHi' END AS Result 
1

如果设定值小而稳定,然后使用CASE表达,否则就把值查找表例如

SELECT T.*, L.lookup_value AS result 
    FROM T JOIN LookupTable ON T.lookup_key = L.lookup_key 
UNION 
SELECT T.*, 'Default case' AS result 
    FROM T 
WHERE lookup_key NOT IN (SELECT lookup_key FROM LookupTable); 
+0

抱歉,但我没有得到你的想法 – Zyku 2012-02-22 08:39:30

+0

@Zyku:在回答你接受,设定值(严格意义上)'(1,2,3,4)'是硬编码到查询。如果第二个查询需要使用相同的一组值,那么您可以复制+粘贴。当这组数值需要改变时,维护人员(不一定是你)将不得不搜索每个出现的集合(4,3,2,1)'(集合没有命令!)并且改变它们。现在考虑SQL只有一个数据结构:表。数据集最好建模为表格,例如使他们的价值观和使用它们的代码更容易维护。但对于小而稳定的套件可能会过度。 – onedaywhen 2012-02-22 09:13:59

+0

我明白你的意思,但不是这种情况下,我需要一些简单的价值观:CASE WHEN DATA_TYPE IN( '焦', 'NCHAR') \t \t CASE WHEN DATA_TYPE IN( 'VARCHAR', '为nvarchar') \t \t CASE WHEN DATA_TYPE ='xml' \t \t CASE当DATA_TYPE IN('bigint','decimal','float','int','money','numeric','real','smallint','smallmoney' 'TINYINT') \t \t CASE WHEN DATA_TYPE = '唯一标识符' \t \t CASE WHEN DATA_TYPE IN( '日期', '日期时间', 'DATETIME2', 'SMALLDATETIME', 'DATETIMEOFFSET') \t \t CASE WHEN DATA_TYPE ='bit' CASE WHEN DATA_TYPE ='varbinary' – Zyku 2012-02-22 10:51:05