2012-02-22 104 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