- - PR -
DISTINCTとORDER BYの併用について
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-04-09 07:54
いつもお世話になります。
現在、SQLサーバー2000(SP4)でストアドプロシージャを作成しています。 下記のようにテーブルAからデータを下記抽出結果のような形で取得したいと考えています。 テーブルA コード1|NO1|コード2|NO2|コード3 ------------------------------------ あ |1|か |1|さ あ |1|か |2|し あ |2|き |1|さ あ |2|き |2|し あ |3|か |1|さ ・・・重複行 抽出結果 コード1|コード2|コード3 ------------------------------------ あ |か |さ ・・・テーブルAの1行目と5行目 あ |か |し あ |き |さ あ |き |し 処理内容のイメージとしては、 SELECT DISTINCT コード1,コード2,コード3 FROM テーブルA ORDER BY NO1,NO2 と実行し、NO1、NO2の非表示項目で昇順ソートし、かつテーブルAの1行目と5行目の重複も除外したいと考えています。 しかし、DISTINCTとORDER BYを併用する場合、ソートキーは出力項目にする必要があるとされています。(http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/tsqlref/ts_sa-ses_0gbp.asp?frame=true)で すが、NO1とNO2を表示すると1行目と5行目は重複しておらず、除外する事ができません。このような場合、どのようにして上記の抽出結果を得れば良いのでしょうか? 分かりにくい説明で申し訳ありませんが、アドバイスをよろしくお願いします。 | ||||||||
|
投稿日時: 2008-04-09 08:03
自己レスです。
DISTINCTとORDER BYが併用できないのならと、一度下記のようにサブクエリも考えてみたのですが、エラーになってしまいました。 サブクエリ SELECT DISTINCT * FROM (SELECT コード1,コード2,コード3 FROM テーブルA ORDER BY NO1,NO2) X エラーメッセージ The ORDER BY clause is invalid in views, inline functions, derived tables, and subqueries, unless TOP is also specified. | ||||||||
|
投稿日時: 2008-04-09 08:33
GROUP BY してみたらどうでしょうか?
| ||||||||
|
投稿日時: 2008-04-09 08:42
SQLServer2000で動くかは知りません テクニカルエンジニア(データベース)だと、 この構文は、文法エラー扱いなんですよね。 [ メッセージ編集済み 編集者: 明智重蔵 編集日時 2008-04-09 08:44 ] | ||||||||
|
投稿日時: 2008-04-09 09:25
末記人さん、明智重蔵さん、アドバイスありがとうございます!
「GROUP BY」、試してみます!確かにGROUP BYすれば重複は除外できますね! 「order by min(NO1),min(NO2);」とはどういう意味になるのでしょうか? これも少し試してみようと思います!! 結果は追って報告させて頂きます。 | ||||||||
|
投稿日時: 2008-04-09 09:50
SQLServer2000で試したら動きました。 思いつかなかった。。。 |
1