我正在运行一个存储过程,以便提取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重新成为呼叫中心而重新出现
我很确定您有一些错误。缺少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)