簡體   English   中英

SQL 服務器:如何在“where”子句中構建類似 IF 的系統?

[英]SQL Server: how to construct a IF like system within “where” clause?

幾次加入后,我有一張如下表

username    trandate    positionname       ChannelID
--------    ----        ------------       ---------
system      01/01/2019                     1
anderson    06/04/2019  chief              1
williams    07/03/2019  chief              2
julie       15/02/2019  technician         48
julie       27/05/2019  chief technician   21

我想計算交易總數,按月、年和渠道類型分組的金額總和。

有一個條件:如果 channelID 等於“1”,那么查詢應該排除(1)在“positionname”上具有 null 值的事務或(2)具有“system”用戶名的事務。

我的代碼如下所示:

    select DISTINCT

DATEPART(YEAR,a.TranDate) as [year],
DATEPART(MONTH,a.TranDate) as [month],

    count(*) as [transaction number], 
    sum(a.Amount) as [Total amount], 

    b.Name as [branch name], 
    c.ChannelName as [channel] 

    from transactions_main as a

left join branches      as b    WITH (NOLOCK) ON a.TranBranch=b.BranchId  
left join Channels      as c    WITH (NOLOCK) ON a.ChannelId=c.ChannelId  
left join Staff_Info    as d    WITH (NOLOCK) ON a.UserName=d.UserCode 

where 
        a.TranDate>'20181231' 
        and b.name not in ('HQ')
        and (a.ChannelId=1 
            and d.positionname is not null 
            and a.UserName not in ('SYSTEM', 'auto') ) 


            group by b.Name, c.ChannelName,DATEPART(YEAR,a.TranDate), DATEPART(MONTH,a.TranDate) 

order by b.Name, Year,month

最后,當然,它沒有工作。 我得到了只有 channelID=1 的事務的總和和計數。

獎金:你想幫助我的另一個話題嗎? 在其中我還需要有關索引的幫助:

當某筆交易完成時確定員工的頭銜

這是: 鏈接

使用 OR 運算符

where 
        a.TranDate>'20181231' 
        and b.name not in ('HQ')
        and (   
                (a.ChannelId=1 
                and d.positionname is not null 
                and a.UserName not in ('SYSTEM', 'auto') ) 
                )
                OR
                a.ChannelId<>1 
            )

暫無
暫無

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

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