选择在两列中具有不同值的ID

时间:2017-07-31 08:59:03

标签: sql

我的表格如下:

EAN | Country | Status
1   | Germany | A
1   | France  | B
1   | Spain   | A
2   | Germany | A
2   | France  | A
2   | Spain   | A

我需要至少在一个国家/地区中状态为“A”的每个ID,但至少不在另一个国家/地区。

在此示例中,结果应包含ID 1,因为它在德国和西班牙的状态为“A”,但在法国则不包含。

2 个答案:

答案 0 :(得分:1)

尝试自我加入

select distinct main.EAN
  from [table] main
  join [table] sub
    on main.EAN = sub.EAN and
       main.Country <> sub.Country and
       main.Status <> sub.Status

[table]必须替换为您实际的表名。这应该会给你想要的结果。

答案 1 :(得分:0)

使用子选择,您可以执行以下操作:

select
  EAN
from
  (
    select
      EAN,
      sum(case when Status = "A" then 1 else 0 end) statusA,
      sum(case when Status <> "A" then 1 else 0 end) statusOther
    from
      statuses
    group by
      EAN
  ) summary
where
  summary.statusA > 0 and
  summary.statusOther > 0

查看示例here