「ある項目の値が重複した場合に」のある項目が分からなかったので、
とりあえず項目1が重複しているものを削除するように、以下を書きました。
(SQL結果1→2→3の順で優先)
大分無駄が多い気がしますので、他の人に期待します。
SQL
1WITH V1 as(SELECT 項目1, 項目2, 項目3, 項目4, 'sqlNum' as 1 FROM SQL結果1
2 UNION
3 SELECT 項目1, 項目2, 項目3, 項目4, 'sqlNum' as 2 FROM SQL結果2
4 UNION
5 SELECT 項目1, 項目2, 項目3, 項目4, 'sqlNum' as 3 FROM SQL結果3)
6SELECT 項目1, 項目2, 項目3, 項目4
7FROM
8V1 as main,
9(SELECT 項目1, min(sqlNum) as minSqlNum FROM V1 GROUP BY 項目1) as sub
10WHERE
11main.項目1 = sub.項目1
12AND sqlNum = minSqlNum
コメントを受け追記:
私が載せたSQLが悪いかもしれません。
SQL結果1,2,3をUNIONしたviewをWITH句で用意しようとしていますが、
WITHの中にサブクエリを書くことはできません。
もし、SQL結果1,2,3を出すのにサブクエリを使用しているのであれば、
↑の方法は使えません。
以下でも出来ないですかね。
SQL
1SELECT 項目1, 項目2, 項目3, 項目4
2FROM
3(SELECT 項目1, 項目2, 項目3, 項目4, sqlNum = 1 FROM SQL結果1
4 UNION
5 SELECT 項目1, 項目2, 項目3, 項目4, sqlNum = 2 FROM SQL結果2
6 UNION
7 SELECT 項目1, 項目2, 項目3, 項目4, sqlNum = 3 FROM SQL結果3) as main,
8(SELECT sub2.項目1, min(sub2.sqlNum) as minSqlNum
9 FROM (SELECT 項目1, 項目2, 項目3, 項目4, sqlNum = 1 FROM SQL結果1
10 UNION
11 SELECT 項目1, 項目2, 項目3, 項目4, sqlNum = 2 FROM SQL結果2
12 UNION
13 SELECT 項目1, 項目2, 項目3, 項目4, sqlNum = 3 FROM SQL結果3) as sub2
14 GROUP BY 項目1) as sub
15WHERE
16main.項目1 = sub.項目1
17AND sqlNum = minSqlNum
あと、DB(SQL)はいくつか種類がありますが、
それごとに書き方に違いがあります。
どのDBを使用しているかによって、動作する、しないが別れてしまいます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/12/14 08:51