SQL Выберите строки на основе параметров - PullRequest
0 голосов
/ 19 июня 2019

поэтому я создал таблицу клиентов, которая выглядит примерно так

image

Каждый клиент является либо новым, либо повторяющимся, либо повторно активированным, и каждый клиент может иметь только один тип, поэтому независимо от типа, он имеет 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 ]

1 голос
/ 19 июня 2019

Вы можете сформировать свои условия как:

WHERE (cs.brandnewcustomer = 1 AND @CustomerType = 'NEW')
      OR
      (cs.recurringcustomer = 1 AND @CustomerType = 'RECURRING')
      OR
      (cs.reactivatedcustome = 1 AND @CustomerType = 'REACTIVATED')
      OR
      (@CustomerType = 'ALL')
0 голосов
/ 19 июня 2019

Я думаю, что это нужно нормализовать

Типы клиентов должны быть в таблице с первичным ключом tb_CustomerType

введите описание изображения здесь

В таблице клиентов должен быть внешний ключ к типу клиента tb_Customer

введите описание изображения здесь

вам не нужно указывать регистр, если у вас есть этот типструктуры таблицы

0 голосов
/ 19 июня 2019

Это должно быть структурировано так:

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
0 голосов
/ 19 июня 2019

Поместите этот оператор 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 значений, то ничего не будет возвращено.Смотрите демо .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...