2013-09-25 65 views
0
DECLARE @Test bit= NULL 
SELECT CASE WHEN @Test = NULL THEN 
    (SELECT * FROM Sales WHERE A =1) 
    ELSE 
    (SELECT * FROM Sales WHERE A =2) 
END 

我查询不完全是这样简单,但在这些线路上。我有一个过程的7个参数。在实际的存储的过程中,首先选择LEFT加入其他3个表(A,B,C)。所述第二选择连接LEFT上先前的图2(A,B)的表和关于销售内部联接本身(A,B,销售)。我试着用工会,但第一选择得行,我不应该看到。第二个选择带来正确的。所以我想可能是我可以做一个案例选择。但我最终与此错误使用情况选择记录在SQL Server中选择

“只有一个表达式可以在选择列表中指定当子查询未与EXISTS引入的。”

有任何想法如何进行呢?我在做一些完全错误的事情吗?如果您需要更多信息,请询问。谢谢。

回答

0

也许只是把它所有的WHERE

SELECT * 
FROM Sales 
WHERE (@Test IS NULL AND A = 1) 
    OR (@Test IS NOT NULL AND A = 2) 

更新:读你的问题再次,它听起来就像你有不同的FROM的情况,在这种情况下使用IF

IF (@Test IS NULL) 
    BEGIN 
     SELECT * FROM Sales WHERE A = 1 
    END 
ELSE 
    BEGIN 
     SELECT * FROM Sales WHERE A = 2 
    END 
0

您可以在WHERE子句中,而不是你的应用case语句(ASLO使用IS NULL代替=):

DECLARE @Test bit 
set @TEST = NULL 

    SELECT * FROM Sales 
    WHERE A = 
      CASE 
       WHEN @Test IS NULL THEN 1 
       ELSE 2 
      END