2011-08-09 63 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?