长CASE语句-它写得尽可能有效吗?

1 sql sql-server

我正在运行一个存储过程,以便提取3月底以来所有近期销售的报告,并且需要将该报告保持每天更新,直到5月初(这是此处的特定销售时期)。

在开始之前,所有内容都已在Access中运行,因此这是我尝试将大报表移入SQL的尝试。

存储过程运行良好,但是有许多销售渠道由数据的其他部分确定,因此这是CASE语句的来源。一些数据正在作为我不希望其访问的渠道而拉动它很长,所以我不知道它是否看起来更整洁?这可能很简单,例如添加方括号,但我在SQL中几乎是自学成才,并且我希望养成良好的习惯,并向他人学习,看看!

CASE 
        WHEN mop = 0
            AND Channel = 'Internet'
            AND financeinstal = 10
            THEN 'Finance option 10 months'
        WHEN mop = 0
            AND Channel = 'Internet'
            AND financeinstal = 4
            THEN 'Finance option 4'
        WHEN Channel = 'Corporate'
            OR pb = 'PR Department'
            THEN 'Corporate'
        WHEN Channel = 'Call Centre'
            OR username = 'call centre'
            AND mop = 3
            OR mop = 4
            THEN 'Call Centre'
        WHEN Channel = 'Internet'
            AND username = 'InternetUser'
            AND mop = 3
            OR mop = 4
            THEN 'Internet'
        WHEN Channel = 'Premium'
            OR Channel = 'Premium Office'
            THEN 'Premium'
        WHEN Channel = 'Ticket Office'
            AND MOP = 1
            OR MOP = 2
            OR MOP = 3
            OR MOP = 4
            THEN 'Ticket Office (Full Payment)'
        WHEN mop_desc = 'Direct Debit'
            AND mop = 8
            THEN 'Automatic'
        WHEN Channel = 'Ticket'
            THEN 'Ticket'
        ELSE 'Other'
        END AS Sales_Channel
Run Code Online (Sandbox Code Playgroud)

因此,我希望结果与我在CASE中所做的一样,但是,例如,我希望某些结果会随着Internet重新成为呼叫中心而重新出现

Gor*_*off 5

我很确定您有一些错误。缺少and和时,应使用括号or。或者,最好使用in

例如:

WHERE Channel = 'Internet' AND
      username = 'InternetUser' AND
      mop = 3 OR
      mop = 4
Run Code Online (Sandbox Code Playgroud)

应该可能是:

WHERE Channel = 'Internet' AND
      username = 'InternetUser' AND
      mop IN (3, 4)
Run Code Online (Sandbox Code Playgroud)