重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

SQL分でわからないことがあるので質問させてください。

Aというテーブルに、
番号と処理通番(ユニーク)の2つカラムがあります。

Aテーブルから重複した番号とその処理通番を
上から4件まで取得したいのですが、
-----------------------------
SELECT A.番号,A.処理通番
FROM A
INNER JOIN
(SELECT 番号
FROM A
GROUP BY 番号
HAVING COUNT(*) > 1) AS B
ON (A.番号 = B.番号)
ORDER BY A.番号,A.処理通番
-----------------------------
のSQLでは重複した番号のデータを
全て取得してしまいます。
番号別に4件まで取得したいのですが、
どのようなSQLを書けば取得できますか?

よろしくお願いします。

A 回答 (2件)

古いSQLserverでも・・



SELECT A1.番号,A1.処理通番
FROM A as A1,A as A2
WHERE
A1.番号 IN (SELECT 番号 FROM A GROUP BY 番号 HAVING COUNT(*) > 1) and
A1.番号=A2.番号 and A1.処理番号>A2.処理番号
group by A1.番号,A1.処理通番
having count(*) < 4

な感じで書けるんじゃないかな。
分析関数を使う方が処理が速いので、2005を使っているなら、A1に書かれているSQL文が良いと思いますけどね。
    • good
    • 0
この回答へのお礼

ありがとうございました。
早速試してみます。

お礼日時:2007/05/31 12:25

(1)SQL Serverのバージョンは、何ですか?


(2)処理通番を上から4件まで取得したい
 上から4件とは、昇順でですか?
 4件に満たない場合は、その分だけ得たいのでしょうか?

<SQL例>SQL Server 2005が前提です
select x.番号,x.処理通番,rank
from
(select 番号,処理通番,rank() over(partition by 番号 order by 処理通番) as rank
from A) as x
inner join
(select 番号
from A
group by 番号
having count(*)>1) as y
on x.番号=y.番号
where rank<=4
order by x.番号,x.処理通番
;
    • good
    • 0
この回答へのお礼

SQLServerのバージョンは2000を使ってます。
2005にバージョンアップした際に試して見ます。
ありがとうございました。

お礼日時:2007/05/31 12:23

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す