
http://oshiete1.goo.ne.jp/qa4165327.html
先日上記の質問をさせていただいたのですが、
検索条件が2セットになり、またまた困っている状況です。
前回通り、検索条件間、グループ間での逆転等はOKです。
度々申し訳ないですが、どなた様か知識がある方にご教授願いたく思います。
宜しくお願い致します。
No.1ベストアンサー
- 回答日時:
あのテーブル構造のままやっているんですか?
力技でクエリを書かないといけない場合は、通常テーブル構造に問題があります。
検索条件が2件以上になる場合、一致の数え方により多少変わってくると思いますが、
・検索条件に全く同じ2レコード(aaa,bbb,ccc,ddd,eee,fffが2行)があった場合には単純に一致数は倍になるのですか?
・前回書いたクエリではたとえばa1とa2に両方同じ値が入っていたとしても一致数は1とカウントするように書きましたが、そこはどうなんでしょう。検索条件1のa1にaaaがあって、検索条件2のa2にもaaaがあると一致数が2ならば、検索条件1のa1,a2の両方にaaaがあっても一致数は2でよいのかなと思えます。
いずれにせよ、内容は大きくは変わりません。
最初に検索条件をまとめてあげるやり方を変えるだけだからです。
DECLARE @res TABLE ([ID][int],[CAT][varchar](1),[VAL][varchar](3))
DECLARE @srch TABLE ([CAT][varchar](1),[VAL][varchar](3),[CNT][int])
INSERT INTO @res
SELECT ID, 'a' CAT,a1 VAL FROM resulttbl
UNION ALL
SELECT ID, 'a' CAT,a2 VAL FROM resulttbl
UNION ALL
SELECT ID, 'b' CAT,b1 VAL FROM resulttbl
UNION ALL
SELECT ID, 'b' CAT,b2 VAL FROM resulttbl
UNION ALL
SELECT ID, 'c' CAT,c1 VAL FROM resulttbl
UNION ALL
SELECT ID, 'c' CAT,c2 VAL FROM resulttbl
INSERT INTO @srch
SELECT CAT,VAL,COUNT(*)
FROM
(SELECT 'a' CAT,a1 VAL FROM srchtbl
UNION ALL
SELECT 'a' CAT,a2 VAL FROM srchtbl
UNION ALL
SELECT 'b' CAT,b1 VAL FROM srchtbl
UNION ALL
SELECT 'b' CAT,b2 VAL FROM srchtbl
UNION ALL
SELECT 'c' CAT,c1 VAL FROM srchtbl
UNION ALL
SELECT 'c' CAT,c2 VAL FROM srchtbl) tmp
GROUP BY CAT, VAL
SELECT r.*,ISNULL(c.CNT,0)
FROM resulttbl r
LEFT OUTER JOIN
(SELECT wt.ID,
SUM(CNT) CNT,
SUM(CASE WHEN wt.CAT='c' THEN CNT 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
No.2
- 回答日時:
少し疑問なのが、前回の回答、なぜこういうつくりにしたのかわかりました?
わかって使っていないのなら、また条件が変わったときに同じように聞くとになりますよね。
いっそのこととりあえずデータをソートなしで取得して、
java側で一致件数をカウントする関数を通して、java側でソートかけたほうが楽じゃないです?
あ、それで、私ならどうするかというと、ユーザー関数を自作します。
文法はうろ覚えなのでイメージだけ
Create function Sortlank
(tbla1 varchar ,tbla2 varchar, ...
pma1_1 varchar, pma2_1 varchar,...
pma2_2 varchar,...
)
(計算して一致する数を出す)
-------
で、Select文は
select A.*,
dbo.SortLank(a-1,a-2,....,'aaa','bbb'...) as Sortkey
order by sortkey,id
みたいな感じで。
そのほうが順位付けのロジックを説明しやすいんじゃないかと。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(Microsoft Office) <条件追加/スプレッドシート>指定の日付より2か月、1.5か月前に書式設定アラートを出したい 7 2023/02/16 07:33
- LINE LINE androidスマホからiPhoneへの複数回移行について 1 2022/12/14 15:01
- Visual Basic(VBA) VBAの繰り返し処理表記と複数の処置条件について 1 2023/01/23 20:08
- その他(健康・美容・ファッション) ブルーライトカット率の高い眼鏡を作れるお店を教えて下さい 1 2023/02/10 17:43
- その他(健康・美容・ファッション) ブルーライトカット率の高い眼鏡を作れるお店を教えて下さい 4 2023/02/10 17:45
- ボランティア フリーメイソンの入会… フリーメイソンに入会できる条件 ⚫︎20歳以上の男性 ⚫︎一定以上の収入があ 1 2023/08/25 04:12
- Excel(エクセル) 条件付書式 Sheet1からSheet2に転記した時の転記ミスを反映させたい 5 2022/05/21 09:52
- Visual Basic(VBA) VBAチェックボックスで有効無効切り替えできるように 5 2022/10/21 16:13
- Excel(エクセル) エクセル 条件に合う日付に入力された時間数の合計したい 4 2022/06/17 22:18
- Visual Basic(VBA) VBA チェックボックスの設定について 1 2022/10/24 10:27
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
複数の条件での絞り込み検索の仕方
-
End Ifに対応するIfブロックが...
-
同一のカラム値をもつもの同士...
-
数百ページあるPDFをWebで公開...
-
日付を一括UPDATE
-
SQLの書き方
-
IDENTITYを設定
-
Mysql DATE型のDEFAULT値
-
Accessで複数(3以上)...
-
sqlite3でrowid以外にid必要で...
-
SQLで以下のような構文でコ...
-
SQLServer 複数列から同一語を検索
-
巨大テーブルからインデックス...
-
同テーブルで指定カラム値を相...
-
一部のカラムでdistinctし全て...
-
頭に0が付く文字
-
表の結合で左表のnullと右表のn...
-
条件付group byについて
-
group_concatを複数列に設定する
-
MySQL側で計算してもらってレコ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
LIKEの右側にカラムを指定でき...
-
mysqlで50音順にorder byしたい。
-
スペースによる絞り込み検索をS...
-
PL/SQLでの文字列比較
-
SQLステータス:37000について
-
複数カラムに対するLIKE文の最適化
-
whereで全てを検索する方法
-
Accessで文字列の一部を抽出す...
-
End Ifに対応するIfブロックが...
-
SELECT、特定カラムの文字列が...
-
ORDER BY CASEで異なる並替え...
-
複数キーワードを複数カラムに...
-
SQL 複数条件を設定
-
WHERE `年月日` = '晴' OR `年...
-
複数の条件での絞り込み検索の仕方
-
LIKE演算子の%について教えて...
-
LIKEは類似一致検索なのでしょ...
-
mysqlのlike binaryでの前方一致
-
SELECT文で、指定カラム以外の...
-
INDIRECT関数の代替方法は?
おすすめ情報