none
コンボボックスのリストを多い順に表示 RRS feed

  • 質問

  • visual web developer 2010 Expressを使用してWeb アプリケーションプロジェクトを作成しています。
    環境は以下です。
    OS:Windows8 32bit
    WEBサーバ:Windows Server 2008 R2 Standard
    SQLServer:microsoft SQL SERVER 2008 R2 Express版
    IISのバージョン:Version7.5.7600.16385
    .NET のバージョン:Microsoft .NET Framework 4
    使用ブラウザ:IE,Firefox,Chrome(すべて最新バージョン)
    使用言語:VB

    ajax cotrol toolkitを使用してコンボボックス「cmbtanto」を配置し,
    SQLDatasourceを読み込ませています。
    表示されるリストの順番を,重複をカットしたうえでデータ数の多い順にしたいです。

    たとえばデータが
    ▼担当
    山田
    吉田
    吉田
    山本
    山本
    山本
    松田
    松田
    とあったら,コンボボックスのリストには
    ▼担当
    山本
    松田(吉田)※どっちでもいいです
    吉田(松田)※どっちでもいいです
    山田
    と表示させたいです。

    現在は以下のように,データの昇順で並替しています。

    ↓コンボボックス↓
    <cc1:ComboBox ID="cmbtanto" runat="server" Width="50px" Height="16px" DataSourceID="SqlDataSource6"
                DataTextField="担当" DataValueField="担当" MaxLength="1"
                style="display: inline;" AutoCompleteMode="SuggestAppend"
                ItemInsertLocation="Prepend" AppendDataBoundItems="True">
            <asp:ListItem></asp:ListItem>
            </cc1:ComboBox>  

    ↓SQLDatasource↓
            <asp:SqlDataSource ID="SqlDataSource6" runat="server"
                ConnectionString="<%$ ConnectionStrings:×××ConnectionString4 %>"
                SelectCommand="SELECT DISTINCT [担当] FROM [MAIN] ORDER BY [担当]"></asp:SqlDataSource>

    どのようにしたらいいでしょうか?
    よろしければご教授ください。
    よろしくお願いいたします!
    2014年7月7日 6:28

回答

  • SQLServerはあまり詳しくありませんが「SelectCommand」部分のSQLで

    ↓SQLDatasource↓
            <asp:SqlDataSource ID="SqlDataSource6" runat="server" 
                ConnectionString="<%$ ConnectionStrings:×××ConnectionString4 %>" 
                SelectCommand="SELECT [担当] FROM [MAIN] GROUP BY [担当] ORDER BY COUNT(*) DESC">

    </asp:SqlDataSource>

    のように変更してはダメですか?

    • 回答としてマーク masunona 2014年7月7日 7:46
    2014年7月7日 7:01
  • >松田(吉田)※どっちでもいいです
    >吉田(松田)※どっちでもいいです

    なので、taro_xxxさんのSQLで良いのですが、気持ち的には、
    ORDER BY COUNT(*) DESC, [担当]
    としておきたいところですね。
    同数の場合の並び順も保証しておいた方が、気持ち悪くないように思います。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    • 回答としてマーク masunona 2014年7月9日 7:46
    2014年7月7日 7:49
    モデレータ

すべての返信

  • SQLServerはあまり詳しくありませんが「SelectCommand」部分のSQLで

    ↓SQLDatasource↓
            <asp:SqlDataSource ID="SqlDataSource6" runat="server" 
                ConnectionString="<%$ ConnectionStrings:×××ConnectionString4 %>" 
                SelectCommand="SELECT [担当] FROM [MAIN] GROUP BY [担当] ORDER BY COUNT(*) DESC">

    </asp:SqlDataSource>

    のように変更してはダメですか?

    • 回答としてマーク masunona 2014年7月7日 7:46
    2014年7月7日 7:01
  • taro_xxx さま

    早速のお返事ありがとうございます。

    いただいたコードでためしてみたところ
    ばっちりできました!
    SELECT "DISTINCT" にこだわりすぎていました。
    大変感謝です。ありがとうございました!

    2014年7月7日 7:42
  • >松田(吉田)※どっちでもいいです
    >吉田(松田)※どっちでもいいです

    なので、taro_xxxさんのSQLで良いのですが、気持ち的には、
    ORDER BY COUNT(*) DESC, [担当]
    としておきたいところですね。
    同数の場合の並び順も保証しておいた方が、気持ち悪くないように思います。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    • 回答としてマーク masunona 2014年7月9日 7:46
    2014年7月7日 7:49
    モデレータ
  • trapemiya さま

    いつもありがとうございます!
    さっそく構文書き加えます。
    ありがとうございました!
    2014年7月9日 7:46