2014-11-04 429 views
0

我正嘗試在一個sql語句中寫入多個IF條件。 我想知道IF SMB是1,然後檢查ACT,REN或REP是否爲1,從resp表中選擇QF列,我希望單個答案爲'a'和'b'作爲它的總和。SQL中的多個IF語句

Input : 

@SMB = 1,@Dealer = 0, @Act = 1, @Ren = 1, @Rep = 1 


tblACT: 
QF 
1 
2 

tblREP 
QF 
1 
2 

tblREN 
QF 
1 
2 


OUTPUT : 
a b 
6 0 

@SMB bit = 1, 
@Dealer bit = 1, 
@Act bit = 1, 
@Ren bit = 1, 
@Rep bit = 1 

Select SUM(tbl.a), SUM(tbl.b) from 
(If @SMB ='1' 
    If @ACT ='1' 
     CASE WHEN QF IN (1,2) THEN 1 ELSE 0 as a 
     CASE WHEN QF IN (4,5) THEN 1 ELSE 0 as b from tblACT 
    union all 
    If @REN='1' 
     CASE WHEN QF IN (1,2) THEN 1 ELSE 0 as a 
     CASE WHEN QF IN (4,5) THEN 1 ELSE 0 as b from tblREN 
    union all 
    If @REP='1' 
     CASE WHEN QF IN (1,2) THEN 1 ELSE 0 as a 
     CASE WHEN QF IN (4,5) THEN 1 ELSE 0 as b from tblREP 
union all 
If @Dealer ='1' 
    If @ACT ='1' 
     CASE WHEN QF IN (1,2) THEN 1 ELSE 0 as a 
     CASE WHEN QF IN (4,5) THEN 1 ELSE 0 as b from tblACT 
    union all 
    If @REN='1' 
     CASE WHEN QF IN (1,2) THEN 1 ELSE 0 as a 
     CASE WHEN QF IN (4,5) THEN 1 ELSE 0 as b from tblREN 
    union all 
    If @REP='1' 
     CASE WHEN QF IN (1,2) THEN 1 ELSE 0 as a 
     CASE WHEN QF IN (4,5) THEN 1 ELSE 0 as b from tblREP) as tbl 
+0

你需要什麼幫助?你期待什麼輸出? – 2014-11-04 18:33:00

+0

這不起作用。它給出了語法錯誤,什麼不是 – user1989 2014-11-04 18:34:22

+0

爲您提供表結構和表數據和輸出示例 – 2014-11-04 18:35:28

回答

0

試試這個,讓我知道。

CREATE TABLE #tmp 
( 
    QF INT 
) 

INSERT INTO #tmp VALUES (1) 
INSERT INTO #tmp VALUES (2) 
INSERT INTO #tmp VALUES (4) 
INSERT INTO #tmp VALUES (4) 
INSERT INTO #tmp VALUES (5) 


DECLARE @SMB bit ,@Dealer BIT,@Act bit ,@Ren BIT,@Rep bit 
SET @SMB = 1 
SET @Dealer = 1 
SET @Act = 1 
SET @Ren = 1 
SET @Rep = 1 

SELECT SUM((CASE WHEN (@SMB = 1 
          OR @Dealer = 1 
         ) 
         AND @ACT = 1 
         AND QF IN (1, 2) THEN 1 
        WHEN (@SMB = 1 
          OR @Dealer = 1 
         ) 
         AND @REN = 1 
         AND QF IN (1, 2) THEN 1 
        WHEN (@SMB = 1 
          OR @Dealer = 1 
         ) 
         AND @REP = 1 
         AND QF IN (1, 2) THEN 1 
        ELSE 0 
       END)) AS A , 
     SUM((CASE WHEN (@SMB = 1 
          OR @Dealer = 1 
         ) 
         AND @ACT = 1 
         AND QF IN (4, 5) THEN 1 
        WHEN (@SMB = 1 
          OR @Dealer = 1 
         ) 
         AND @REN = 1 
         AND QF IN (4, 5) THEN 1 
        WHEN (@SMB = 1 
          OR @Dealer = 1 
         ) 
         AND @REP = 1 
         AND QF IN (4, 5) THEN 1 
        ELSE 0 
       END)) AS B 
FROM #tmp 
+0

CASE WHEN(@SMB = 1 OR Dealer = 1) 不應該來,因爲表格對於所有內容都不相同 – user1989 2014-11-04 19:01:10