- ベストアンサー
SQLで複数条件を設定してデータを抽出する方法
- javaで処理しているSQL Server2005のテーブルから複数条件を設定してデータを抽出する方法について教えてください。
- テーブルの構造や抽出したいデータ、期待する出力結果について詳しく解説してください。
- また、他のテーブル構造や抽出方法についても提案していただけると助かります。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
うひゃー、まるでパズルのようですね。 検索条件は必ずワンセットだけですか、とか、細かいデータの入り方が不明ですが、今回の例なら以下のようにできます。 最初のワークテーブルに入れているところから、より検索に向いたテーブル構造が何かも察して頂けるのではと期待します。 (検索対象がresulttblに、検索条件はsrchtblに1行だけとしてみてください) DECLARE @res TABLE ([ID][int],[CAT][varchar](1),[VAL][varchar](3)) DECLARE @srch TABLE ([CAT][varchar](1),[VAL][varchar](3)) INSERT INTO @res SELECT ID,'a' CAT,a1 VAL FROM resulttbl UNION ALL SELECT ID,'a',a2 from resulttbl UNION ALL SELECT ID,'b',b1 from resulttbl UNION ALL SELECT ID,'b',b2 from resulttbl UNION ALL SELECT ID,'c',c1 from resulttbl UNION ALL SELECT ID,'c',c2 from resulttbl INSERT INTO @srch SELECT CAT,VAL FROM (SELECT 'a' CAT,a1 VAL from srchtbl UNION ALL SELECT 'a',a2 from srchtbl UNION ALL SELECT 'b',b1 from srchtbl UNION ALL SELECT 'b',b2 from srchtbl UNION ALL SELECT 'c',c1 from srchtbl UNION ALL SELECT 'c',c2 from srchtbl) tmp GROUP BY CAT,VAL SELECT r.*,ISNULL(c.CNT,0) FROM resulttbl r LEFT OUTER JOIN (SELECT wt.ID, COUNT(*) CNT, SUM(CASE WHEN wt.CAT='c' THEN 1 ELSE 0 END) CNT_C FROM @res wt INNER JOIN @srch ws ON ws.CAT=wt.CAT AND ws.VAL=wt.VAL GROUP by wt.ID) c ON c.ID=r.ID ORDER BY CNT DESC,CNT_C DESC
お礼
おぉぉぉ~~~ すばらしいです。さすがです。 分かりずらい説明の中、ありがとうごいます。 私の望んでいた通りの結果が出力されました。 組み立て方の発想の問題なんですね。 頭の中がぐちゃぐちゃになり訳の分からないことになっていました。 再度見直し勉強させていただきます。 また、その他アドバイスがありましたら宜しくお願い致します。