SQL根据参数选择行

时间:2019-06-19 17:12:26

标签: sql sql-server

所以我创建了一个看起来像这样的客户表

每个客户都是新客户,经常性客户或重新激活的客户,每个客户只能是一种类型,因此无论哪种类型,该字段中的值均为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

有人将如何将其转换为实际代码吗?

4 个答案:

答案 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的表中

enter image description here

Customer表需要对客户类型tb_Customer

具有外键

enter image description here

如果您具有这种表结构,则不必具有case语句