2011-08-09 65 views
0

我有一個case陳述(見下文),但我總是想要返回一個值,即使沒有任何匹配WHERE類。那可能嗎?謝謝總是選擇一行sql

SELECT 
    CASE 
     WHEN COUNT(*) > 10 THEN 1 
     ELSE 0 
    END 
FROM 
fldt_QueryDSLAM lastDay 
WHERE AccountID = @acc 
    AND lastDay.DSL = @dsl 
GROUP BY lastDay.DSL 

回答

1

你可以將選擇包裝在isnull中;

SELECT ISNULL((
    SELECT 
     CASE 
      WHEN COUNT(*) > 10 THEN 1 
      ELSE 0 
     END 
    FROM 
    fldt_QueryDSLAM lastDay 
    WHERE AccountID = @acc 
     AND lastDay.DSL = @dsl 
    GROUP BY lastDay.DSL 
), -99 /*no match*/) 
2

如果WHERE子句返回一行(或更確切地說是一個組),則刪除GROUP BY。然後你會在輸出中總是有一行。

我以爲它會(返回一組),因爲你有GROUP BY上的過濾柱和帳戶ID不選擇或GROOUP提及

SELECT 
    CASE 
     WHEN COUNT(*) > 10 THEN 1 
     ELSE 0 
    END 
FROM 
    fldt_QueryDSLAM lastDay 
WHERE 
    AccountID = @acc AND lastDay.DSL = @dsl 

爲什麼,看到這一點:Does COUNT(*) always return a result?