2016-08-16 57 views
1

查询写入case内运行正常,当我运行它没有使用开关的情况下,但是当我把这个查询的情况下,它开始给错误我怎么能改变我的查询里面的开关情况下运行如何把这个整个SQL查询内CASE语句

Declare @number int 
set @number = 1 


SELECT 
    CASE @number 
     WHEN 1 THEN (SELECT  
         userId, checkfreeId, role, buname, fiservEmailId 
        FROM  
         (SELECT  
          tbl_buLogin.userId, tbl_buLogin.checkfreeId, 
          tbl_buroles.role, tbl_bu.buname, 
          tbl_buLogin.fiservEmailId 
         FROM   
          tbl_buLogin 
         INNER JOIN 
          tbl_buroles ON tbl_buLogin.roleId = tbl_buroles.id 
         INNER JOIN 
          tbl_userbujoin ON tbl_userbujoin.userId = tbl_buLogin.userId 
         INNER JOIN 
          tbl_bu ON tbl_bu.buid = tbl_userbujoin.buId 
            AND tbl_bu.buid IN (SELECT tbl_userbujoin.buId 
                 FROM tbl_buLogin 
                 INNER JOIN tbl_userbujoin ON tbl_buLogin.userId = tbl_userbujoin.userId 
                 WHERE tbl_buLogin.checkfreeId = 'testiso') 
         UNION 
         SELECT  
          tbl_buLogin_2.userId, tbl_buLogin_2.checkfreeId, tbl_buroles_1.role, tbl_bu_1.buname, tbl_buLogin_2.fiservEmailId 
         FROM   
          tbl_buLogin AS tbl_buLogin_2 
         INNER JOIN 
          tbl_buroles AS tbl_buroles_1 ON tbl_buLogin_2.roleId = tbl_buroles_1.id 
         INNER JOIN 
          tbl_bu AS tbl_bu_1 ON tbl_bu_1.buid = tbl_buLogin_2.buId 
               AND tbl_bu_1.buid IN (SELECT tbl_userbujoin.buId 
                     FROM tbl_buLogin 
                     INNER JOIN 
                      tbl_userbujoin on tbl_buLogin.userId = tbl_userbujoin.userId 
                     WHERE tbl_buLogin.checkfreeId = 'testiso') 

         WHERE  
          (tbl_buLogin_2.userId NOT IN (SELECT  tbl_userbujoin_1.userId 
                  FROM tbl_buLogin AS tbl_buLogin_1 
                  INNER JOIN tbl_userbujoin AS tbl_userbujoin_1 ON tbl_userbujoin_1.userId = tbl_buLogin_1.userId))) AS tbl 
       ORDER BY role) 
     ELSE 'NO' 
    END 
+2

非常乱码后,我建议IF/ELSE IF - CASE不是流动的控制。 –

+2

T-SQL中的CASE是*表达式*(如'a + b') - ** NOT **语句! 'CASE'最终将返回**一个单一的原子值** - 它是** NOT **旨在交替执行一组代码或另一组代码 –

回答

2

为什么不使用IF-ELSE

IF @number = 1 THEN 
BEGIN 
    --your Query here 
END 
ELSE 
    SELECT 'NO'