选择不同的值取决于其他列的标签/值

时间:2019-04-23 10:53:37

标签: sql oracle

我的表格有4列(客户,性别,部门,产品) 性别具有与每个客户相关的独特价值:男性,女性或空 部门与每个产品(男人或女人)都有独特的价值

对于男性顾客可以购买女性产品,反之亦然,对于女性顾客购买的男性产品

我想创建一个表,仅选择将男性产品归于男性而仅将女性产品归为女性的记录/行(如果性别为空,则选择女性产品记录) 有没有简单的方法可以做到这一点

我做了一个复杂的过程。首先,使用客户信息来区分男性客户和其他客户(创建了2个表,cust_male和cust_other)

然后,如果客户在cust_male表中,则使用join,返回men部门产品行(其中division ='men');如果客户在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 个答案:

答案 0 :(得分:1)

  

我想创建一个表,仅选择男性为男性的记录/行,女性为女性的记录(如果性别为空,则选择女性产品记录),有没有简单的方法

您要过滤数据,因此听起来像where子句:

select tep.*
from tep
where (gender = 'male' and division = 'men') or
      ((gender = 'female' or gender is null) and division = 'women')