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  

id2001 年、2002 年、2003 年の が必要です。

私の結果セット:

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)ます。

1 つの ID が複数の年になる可能性があるため、結果セットには重複が含まれます。重複を削除するには、ID でGROUP BYするか、 DISTINCTステートメントを使用して一意の要素のみを表示します。

アップデート

コメントに基づいて、3 年すべての ID のみを表示するバージョンを次に示します。DISTINCT t.YEAR1 つの年が複数回繰り返される可能性がある ID のカウントを避けるために使用します。このHAVING COUNT(DISTINCT t.YEAR) = 3部分により、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

ID の一意の年のみをカウントするロジックを示すために、id 3 に 2003 年の 2 つの行があるデータ セットを含むsqlFiddleを更新しました。

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