• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:複雑なSQLを一発で実行)

複雑なSQLを一発で実行

このQ&Aのポイント
  • F_Memoに値が入っているレコードが対象であり、F_Kaisuが数字の順番になっていないF_Noを抜き出したい
  • 上記の条件に該当するレコードのうち、F_Noが001のものを取得したい
  • SQL一発でこの要件を実現することは可能かどうか

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

SELECT F_No FROM (SELECT DISTINCT F_No,F_Kaisu FROM テーブル名 WHERE F_Memo IS NOT NULL)AS T GROUP BY F_No HAVING COUNT(*)<>MAX(F_Kaisu) ORDER BY 1 です。

yuji_from_kyoto
質問者

お礼

回答ありがとうございます。 シンプルで見やすいですね。 まさかこれ一個で、出来るとは、目から鱗が落ちました! having句で、COUNT(*)<>MAX(F_Kaisu)とすれば、 抜け落ちたF_Kaisuにより、COUNTとMAX(F_Kaisu)が違うので、 ヒットしますね! 真にありがとうございます!

その他の回答 (2)

  • t-ka
  • ベストアンサー率28% (14/50)
回答No.2

例えばこんなのはどうでしょう。 WITH test (F_No,F_Kaisu,F_hoge) AS ( SELECT F_No,F_Kaisu , row_number()over(partition by F_No order by F_kaisu ) as F_hoge from F_Tbl group by F_No,F_Kaisu ) select * from F_Tbl where F_No = ( select F_No from test group by F_No having MAX(F_kaisu)<> MAX(F_hoge ) ) and F_Memo is not null

yuji_from_kyoto
質問者

お礼

なるほど。 WITH句を使うわけですね。 ちょっと複雑ですが、勉強になります! 真にありがとうございます!

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.1

COUNT(F_Kaisu) = COUNT( DISTINCT F_Kaisu ) ・重複がない MAX(F_Kaisu)-MIN(F_Kaisu)+1=COUNT(F_Kaisu) ・稠密である を使えばできそうですが、めんどくさそう。 ストアドで判定したほうがよくありませんか。

yuji_from_kyoto
質問者

お礼

確かにいろいろ複雑に絡み合わせないといけなさそうですね。 ストアドでプログラムを作成する方が楽ですね! ありがとうございます!

関連するQ&A