トップ回答者
GROUP BYで括った場合のDRDER BYが適用されない

質問
-
環境 VS2010 SQLServer2008 VB ASP.NET4
テーブル
商品名 使用者数
A 5
B 6
A 2
B 3
というテーブルがあるとして、
SELECT TOP (100) PERCENT 商品名, SUM(使用者数) AS 使用者数計
FROM dbo.tbl1
GROUP BY 商品名
ORDER BY 使用者数計 DESC
という風にSQLを書いたのですが、意図したとおりになりません。
やりたいこと:グループ化した商品を使用者数計で多い順に並び変えたい
商品名 使用者数
B 9
A 7
という風に
有識者の方、お力添えをお願いいたします。
- 編集済み kazukazu2002 2012年4月25日 3:37
回答
-
ちょっと検索してみました。以下のようなことがあるようですね。
ビューのソートについて
http://ziddy.japan.zdnet.com/qa4420769.html?order=DESC&by=datetime★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
- 回答としてマーク kazukazu2002 2012年4月26日 1:11
- 回答としてマークされていない kazukazu2002 2012年4月26日 3:06
- 回答としてマーク kazukazu2002 2012年4月26日 4:04
すべての返信
-
恐らくですが、
SELECT TOP (100) PERCENT WK.* FROM ( SELECT 商品名 , SUM(使用者数) AS 使用者数計 FROM dbo.tbl1 GROUP BY 商品名 ) AS WK ORDER BY 使用者数計 DESC
とかでは?
※TOP句とGROUP BY句を同レベルで記載すると分かりづらいので、
分けて書いた方が良いと思います。合わせて、
SQL Server 2005以降はSELECT句で付けたエイリアスを
同レベルのORDER BY句で指定出来なかった気がするのですが、
提示されたSQLってエラーになりませんか?※合わせて以降の話は忘れて下さい。思い違いでした。。。
- 編集済み aviator__ 2012年4月25日 5:11
-
-
なんとなくSQLの問題ではなさそうな気がします。
>>SQLは発行できて、結果は出ているのですが、降順になっていないのです。
との事ですが、実行環境は何ですか?
>>環境 VS2010 SQLServer2008 VB ASP.NET4
とあるので、Webアプリ中でSQLを発行していると思われますが、
だとしたらSQLで取得した後にソートしてしまっているという事は無いでしょうか。Managment Studio上で実行した結果の取得内容が降順になっていないのか、
取得後に何かロジックを介した後のアプリ表示内容が降順になっていないのか・・・どちらでしょうか。
-
ご返答ありがとうございます。
はい、実行環境は、VS2010上のサーバーエクスプローラーで実行したビューの結果の取得内容です。
アプリ自体にはまだなにもしておりませんので、単体での実行だと思うのですが・・・
すみません
- 回答としてマーク kazukazu2002 2012年4月26日 1:11
- 回答としてマークされていない kazukazu2002 2012年4月26日 1:11
-
ちょっと検索してみました。以下のようなことがあるようですね。
ビューのソートについて
http://ziddy.japan.zdnet.com/qa4420769.html?order=DESC&by=datetime★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
- 回答としてマーク kazukazu2002 2012年4月26日 1:11
- 回答としてマークされていない kazukazu2002 2012年4月26日 3:06
- 回答としてマーク kazukazu2002 2012年4月26日 4:04
-
trapemiya様
御返答ありがとうございます。
早速試してみました。結果思い通りになりました。 書き方的に問題が無かったにも関わらず、裏技的なことになっているとは・・・
解答としては
SELECT TOP (1000) 商品名, SUM(使用者数) AS 使用者数計
FROM dbo.tbl1
GROUP BY 商品名
ORDER BY 使用者数計 DESC
これで、商品名を合計した使用者の多い順で並び替えることができました。
ただ、問題があります。レコード全件が表示されてしまいますので、困っております。
上位10件をこの状態で表示できればいいのですが・・・
- 回答としてマーク kazukazu2002 2012年4月26日 1:11
- 回答としてマークされていない kazukazu2002 2012年4月26日 3:06
- 編集済み kazukazu2002 2012年4月26日 3:08