所以我创建了一个看起来像这样的客户表
每个客户都是新客户,经常性客户或重新激活的客户,每个客户只能是一种类型,因此无论哪种类型,该字段中的值均为1,其他所有字段的值为0。
我创建了一个报告,在该报告中,我想有一个名为“客户类型”的参数,该参数可让您选择新的,重复发生的,重新激活的以及所有参数,它将仅显示您选择的客户类型。
我不确定该怎么做。
我已经完成了整个查询,我只需要对where子句有所帮助。
伪代码是这样的
Case when @CustomerType = 'NEW'
THEN where cs.brandnewcustomer = 1
Case when @CustomerType = 'RECURRING'
THEN where cs.recurringcustomer= 1
Case when @CustomerType = 'REACTIVATED'
THEN where cs.reactivatedcustomer= 1
else case when @CustomerType = 'All' end
有人将如何将其转换为实际代码吗?
答案 0 :(得分:1)
您可以通过以下方式形成条件:
WHERE (cs.brandnewcustomer = 1 AND @CustomerType = 'NEW')
OR
(cs.recurringcustomer = 1 AND @CustomerType = 'RECURRING')
OR
(cs.reactivatedcustome = 1 AND @CustomerType = 'REACTIVATED')
OR
(@CustomerType = 'ALL')
答案 1 :(得分:0)
将此CASE语句放在WHERE子句中:
select * from customers
where 1 = case @CustomerType
when 'NEW' then brandnewcustomer
when 'RECURRING' then recurringcustomer
when 'REACTIVATED' then reactivatedcustomer
when 'All' then 1
end
如果参数与4个值都不匹配,则不会返回任何内容。
请参见demo。
答案 2 :(得分:0)
它的结构需要这样:
SELECT ... FROM ...
WHERE cs.brandnewcustomer = CASE WHEN @CustomerType = 'NEW' THEN 1 ELSE 0 END
AND cs.recurringcustomer = CASE WHEN @CustomerType = 'RECURRING' THEN 1 ELSE 0 END
AND cs.reactivatedcustomer = CASE WHEN @CustomerType = 'REACTIVATED' THEN 1 ELSE 0 END
OR 1 = CASE WHEN @CustomerType = 'All' THEN 1 ELSE 0 END
答案 3 :(得分:0)
我认为这需要规范化
客户类型必须位于具有主键tb_CustomerType的表中
Customer表需要对客户类型tb_Customer
具有外键如果您具有这种表结构,则不必具有case语句