0

SQL Server 2008 には、People (ID、Gender、Name) というテーブルがあります。性別は男性または女性です。同じ名前の人がたくさんいる可能性があります。次のように、性別ごとに上位 2 人の名前とその数を表示するクエリを書きたいと思います。

  Male        Female
Adam   23    Rose  34
Max    20    Jenny 15

PIVOT が使用される可能性があると思いますが、私が見たすべての例では、ヘッダーごとに 1 つの列しか表示されません。

4

2 に答える 2

0

ウィンドウ関数を使用します。以下は、一時テーブル #people を使用した完全なソリューションです。

-- temp db
を使用 tempdb を使用。
行く

-- テスト テーブルをドロップします。 --テーブル
#people をドロップします。
- 行く

-- テスト テーブルの
作成 create table #people (my_id int, my_gender char(1), my_name varchar(25));
行く


-- #people からのテスト テーブルの削除をクリアします。

-- #people 値(23, 'M', 'Adam'), (34, 'F', 'Rose')に3 つのカウントを
挿入します。 行く 3



-- #people 値(20, 'M', 'Max'), (15, 'F', 'Jenny')に2 つのカウントを
挿入します。 行く 2



-- #people 値(20, 'M', 'John'), (15, 'F', 'Julie')への1 つのカウント
挿入; 行く



-- 性別でトップ 2 をつかみ
ます。
with cte_Get_Top_Two as
(
select ROW_NUMBER() OVER(PARTITION BY my_gender ORDER BY count( ) DESC) AS my_window,
my_gender, my_name, count(
) as total
from #people
group by my_gender, my_name
)
select * from cte_Get_Top_Two where my_window in (1 、 2)
行く

これが出力です。

ここに画像の説明を入力

PS: my_id は問題とは関係ありませんが、解決策は変わらないため、テーブルから my_id を削除できます。

于 2013-08-13T15:32:00.120 に答える