- ベストアンサー
SQL2008 クエリ文でテーブルAのデータを全て取得する方法
- テーブルAにはKAINoとSEQのデータがありますが、1つのKAINoに対して存在するSEQはバラバラです。全てのKAINoにSEQ1〜7を作成するクエリを流したい場合、どのようなクエリを使用すれば良いでしょうか?
- この問題を解決するためには、テーブルA内の最大SEQと最小SEQを取得し、それぞれのKAINoに対してSEQ1〜7を生成する方法を使用する必要があります。
- 具体的には、最小SEQを0として、テーブルAの各KAINoに対して最小SEQ+1〜最大SEQ+1までの連続したSEQを生成するクエリを作成します。これにより、全てのKAINoにSEQ1〜7が含まれる結果が得られます。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
select t1.KAINo , (select count(*) from テーブルA t2 where t1.KAINo = t2.KAINo and t2.SEQ <= t1.SEQ) from テーブルA t1 KAINo SEQ 0001 1 0001 2 0001 3 0001 5 0002 1 0002 5 上の順にt1で取得されるとして、 (select count(*) from ・・・)は、それぞれ 1 2 3 4 1 2 となります。 件数多いとちょっと遅いので要注意ですが。
その他の回答 (2)
- nora1962
- ベストアンサー率60% (431/717)
SELECT T.KAINo, DUMMY.SEQ FROM ( SELECT DISTINCT KAINo FROM テーブルA ) T ,(SELECT 1 SEQ UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 ) DUMMY 追加したいなら INSERT INTO テーブルA SELECT T.KAINo, DUMMY.SEQ FROM ( SELECT DISTINCT KAINo FROM テーブルA ) T ,(SELECT 1 SEQ UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 ) DUMMY WHERE NOT EXISTS (SELECT 1 FROM テーブルA WHERE テーブルA.KAINo = T.KAINo AND テーブルA.SEQ = DUMMY.SEQ )
- 原沢 信道(@nharasawa)
- ベストアンサー率53% (90/168)
INSERT INTO テーブル名(KAINo,SEQ) SELECT DISTINCT KAINo,1 FROM テーブル名 T1 WHERE NOT EXISTS(SELECT ' ' FROM テーブル名 T2 WHERE T1.KAINo=T2.KAINo AND T2.SEQ=1) UNION SELECT DISTINCT KAINo,2 FROM テーブル名 T1 WHERE NOT EXISTS(SELECT ' ' FROM テーブル名 T2 WHERE T1.KAINo=T2.KAINo AND T2.SEQ=2) UNION SELECT DISTINCT KAINo,3 FROM テーブル名 T1 WHERE NOT EXISTS(SELECT ' ' FROM テーブル名 T2 WHERE T1.KAINo=T2.KAINo AND T2.SEQ=3) UNION SELECT DISTINCT KAINo,4 FROM テーブル名 T1 WHERE NOT EXISTS(SELECT ' ' FROM テーブル名 T2 WHERE T1.KAINo=T2.KAINo AND T2.SEQ=4) UNION SELECT DISTINCT KAINo,5 FROM テーブル名 T1 WHERE NOT EXISTS(SELECT ' ' FROM テーブル名 T2 WHERE T1.KAINo=T2.KAINo AND T2.SEQ=5) UNION SELECT DISTINCT KAINo,6 FROM テーブル名 T1 WHERE NOT EXISTS(SELECT ' ' FROM テーブル名 T2 WHERE T1.KAINo=T2.KAINo AND T2.SEQ=6) UNION SELECT DISTINCT KAINo,7 FROM テーブル名 T1 WHERE NOT EXISTS(SELECT ' ' FROM テーブル名 T2 WHERE T1.KAINo=T2.KAINo AND T2.SEQ=7) でどうでしょうか。
お礼
大変遅くなりましたが、ご回答ありがとうございました。 皆様にご教授頂いた知識は、大切に致します。 今回も助かりました!