- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:複雑なSQLを一発で実行)
複雑なSQLを一発で実行
このQ&Aのポイント
- F_Memoに値が入っているレコードが対象であり、F_Kaisuが数字の順番になっていないF_Noを抜き出したい
- 上記の条件に該当するレコードのうち、F_Noが001のものを取得したい
- SQL一発でこの要件を実現することは可能かどうか
- みんなの回答 (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 です。
その他の回答 (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
質問者
お礼
なるほど。 WITH句を使うわけですね。 ちょっと複雑ですが、勉強になります! 真にありがとうございます!
- nora1962
- ベストアンサー率60% (431/717)
回答No.1
COUNT(F_Kaisu) = COUNT( DISTINCT F_Kaisu ) ・重複がない MAX(F_Kaisu)-MIN(F_Kaisu)+1=COUNT(F_Kaisu) ・稠密である を使えばできそうですが、めんどくさそう。 ストアドで判定したほうがよくありませんか。
質問者
お礼
確かにいろいろ複雑に絡み合わせないといけなさそうですね。 ストアドでプログラムを作成する方が楽ですね! ありがとうございます!
お礼
回答ありがとうございます。 シンプルで見やすいですね。 まさかこれ一個で、出来るとは、目から鱗が落ちました! having句で、COUNT(*)<>MAX(F_Kaisu)とすれば、 抜け落ちたF_Kaisuにより、COUNTとMAX(F_Kaisu)が違うので、 ヒットしますね! 真にありがとうございます!