SQLで複数の項目のTOP3を取得


ケットシー  2006-10-19 03:24:06  No: 133784

VB6 SP5  SQL server 2000です。

VBからSQL文で、複数の項目のTOP3を取得しようと思います。
tbl1,tbl2のテーブルから金額(kin)の高いもののコード(cd)
と名称(nm)を取得します。

テーブル    取得カラム(文字型)    順序に使うカラム(数値型)  
tbl1          cd      nm                    kin
tbl2          cd      nm                    kin

  
SQL文一回でしようと思って以下のような文にしました。

select U.cd,U.nm,U.kin ,U.区分 from

(select top 3 cd,nm,kin,'1' as 区分 from tbl1 order by kin desc

union all

 select top 3 cd,nm,kin,'2' as 区分 from tbl2 order by kin desc
) U

order by U.区分,U.kin

しかしこれを実行すると、kinの大きい順には表示されませんでした。
何か間違っているのでしょうか?


魔界の仮面弁士  2006-10-19 05:21:03  No: 133785

http://msdn2.microsoft.com/ja-jp/library/ms191141.aspx

手元に SQL Server 2000/2005 が無いので確認していませんが、
上記のヘルプトピックを見た限りでは、

≫ UNION を使用するときは、個別の SELECT ステートメントで
≫ 独自の ORDER BY 句や COMPUTE 句を指定することはできません。
≫ ORDER BY 句または COMPUTE 句は最後の SELECT ステートメントの後に
≫ 1 つだけ指定でき、その句は最終的な結果セットの組み合わせに
≫ 適用されます。

と書かれているので、このあたりに原因があるのかも。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加