簡體   English   中英

SQL中的多個IF語句

[英]Multiple IF Statements in SQL

我正在嘗試在sql語句中編寫多個IF條件。 我想知道,如果SMB為1,然后檢查ACT,REN或REP是否為1,請從resp表中選擇QF列,我希望將單個答案作為'a'和'b'作為其總和。

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

試試這個,讓我知道。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM