0

我有一个关于 Oracle SQL 的问题。

我的数据如下所示:

id   year
--   ----
1    2000
1    2001
1    2002
1    2003
1    2006
1    2000
2    2001
2    2002
2    2003
3    2003
3    2005 
4    2012
4    2013  

我想要id具有 2001、2002、2003 年的 's。

我的结果集:

id   
--
1
2

请帮我解决一下这个。我实际上尝试过搜索这个,但无法找到一种方法来搜索我的特定问题。

4

2 回答 2

4

SQL

SELECT t.id
FROM TABLE t
WHERE t.year in(2001,2002,2003)
GROUP BY t.id

示例 SqlFiddle

http://sqlfiddle.com/#!2/4ec9f/2/0

解释

您希望过滤数据集以仅显示具有特定年份的行,这就是您在 where 子句中放入的内容WHERE t.year in(2001,2002,2003)

由于单个 id 可能存在多年,因此您的结果集将包含重复项。要删除重复项,您可以按 ID分组或使用DISTINCT语句仅显示唯一元素。

更新

根据评论,这是一个仅显示三年的版本。我们DISTINCT t.YEAR用来避免计算可能会在一年内重复多次的 id。该HAVING COUNT(DISTINCT t.YEAR) = 3部分确保我们只包括所有三年的 id。

SELECT t.id
FROM years t
WHERE t.year in(2001,2002,2003)
GROUP BY t.id
HAVING COUNT(DISTINCT t.YEAR) = 3

更新了 sqlFiddle,其中包括一个数据集,其中 id 为 3 有两行 2003 年,以展示仅计算 ID 的唯一年份的逻辑。

于 2013-06-05T15:54:03.427 回答
1
select distinct id
from table
where year in(2001,2002,2003)
于 2013-06-05T15:54:36.047 回答