выберите другое значение в зависимости от тега / значения других столбцов - PullRequest
2 голосов
/ 23 апреля 2019

У меня в таблице 4 столбца (клиент, пол, подразделение, продукт). Пол имеет уникальную ценность, связанную с каждым клиентом: мужской, женский или нулевой отдел имеет уникальную ценность, связанную с каждым продуктом: мужчинами или женщинами

для мужчины покупатель может купить женские товары, наоборот, для женщины покупающий мужской продукт

Я хочу создать таблицу, выбирайте только записи / строки, содержащие мужской продукт, для мужчин и только женский продукт для женщин.(если пол пуст, выберите записи о женских продуктах) Есть ли простой способ сделать это?

Я сделал сложный процесс.сначала используйте информацию о клиенте, чтобы разделить мужчин и других клиентов (создано 2 таблицы, cust_male и cust_other)

, затем используйте объединение, если клиент в таблице cust_male возвращает строки продуктов для мужчин (где подразделение = 'мужчины)');если клиент в таблице cust_other вернет строки продуктов для женского деления (где дивизион = 'женщины'), то 'объединит все' в две части.

Надеюсь, у меня есть очень простой способ или код для решения этой проблемы.

мы можем использовать код для создания таблицы tep

create table tep (id, gender, division, product) as
(
  select 1, ‘male’, ‘men’, ‘aaa’ from dual
  union all select 2, ‘female’, ‘women’, ’bbb’ from dual
  union all select 2, ‘female’, ‘men’, ‘ccc’ from dual
  union all select 1, ‘male’, ‘women’, ‘ddd’ from dual
  union all select 3, ‘female’, ‘women’, ’ddd’ from dual
  union all select 4, ‘null’, ‘women’, ’eee’ from dual
 union all select 4, ‘null, ‘men, ’ccc’ from dual
);

мой метод был

create table cust_male as
select id from tep where gender='male';

create table cust_other as
select id from tep where (gender ='female') or (gender='null');

select * from tep t
inner join cust_male m
on m.id=t.id
where division ='men'

union all

select * from tep t
inner join cust_other f
on f.id=t.id
where division ='women'

надеюсь, мне не нужно создавать эти две дополнительные таблицы и иметьМы просто понимаем, что выбираем только мужские ряды продуктов для мужчин и выбираем женские ряды продуктов для женщин или нулевых клиентов

1 Ответ

1 голос
/ 23 апреля 2019

Я хочу создать таблицу, выберите только те записи / строки, в которых есть мужской продукт и мужской, и только женский продукт для женщин (если пол нулевой, выберите записи о женских продуктах). Есть ли простой способ сделать это?

Вы хотите отфильтровать данные, так что это звучит как предложение where:

select tep.*
from tep
where (gender = 'male' and division = 'men') or
      ((gender = 'female' or gender is null) and division = 'women')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...