C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: SQL文で抽出した行をカテゴリごとに1行にするには?


(過去ログ 92 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■55071 / inTopicNo.1)  SQL文で抽出した行をカテゴリごとに1行にするには?
  
□投稿者/ 刈歩 菜良 CTP (5回)-(2010/11/16(Tue) 14:33:34)
刈歩 菜良 CTP さんの Web サイト

分類:[データベース全般] 

お世話になります。かるぼです。

たとえば、テーブルで

id | category | name
---------------------
1 |    a01 | apple
2 |    a01 | orange
3 |    b01 | wine
4 |    b01 | beer

のようなデータがあった場合、カテゴリでソートをかけることは簡単にできますが、その結果をカテゴリーごとに1行にすることはできますでしょうか?
出力イメージはたとえばこんな感じ

a01, apple, orange
b01, wine, beer

ストアド書けば簡単なのですが、SQL文だけでできないもんかなぁと言うのがご質問の意図です。

よろしくお願いいたします。
引用返信 編集キー/
■55077 / inTopicNo.2)  Re[1]: SQL文で抽出した行をカテゴリごとに1行にするには?
□投稿者/ shu (182回)-(2010/11/16(Tue) 15:35:38)
No55071 (刈歩 菜良 CTP さん) に返信

category内の最大レコード数を4として

Select category
, Max(Case when no=1 then name else null end) name1
, Max(Case when no=2 then name else null end) name2
, Max(Case when no=3 then name else null end) name3
, Max(Case when no=4 then name else null end) name4
From (
Select category,name
, ROW_NUMBER() OVER(Partition By category order by id) no
From テーブル) A
Group By category

こんなんでどうでしょう?
引用返信 編集キー/
■55128 / inTopicNo.3)  Re[2]: SQL文で抽出した行をカテゴリごとに1行にするには?
□投稿者/ 刈歩 菜良 CTP (6回)-(2010/11/17(Wed) 20:38:23)
刈歩 菜良 CTP さんの Web サイト
shu さん

ありがとうございます。
結構力技っぽい感じにかできないんですねぇ。
最大レコード数が制限されてしまうのも厳しいですね。

やっぱ、ストアドプロシージャがベストっぽいですね。
ありがとうございました。
<(_ _)>

No55077 (shu さん) に返信
> ■No55071 (刈歩 菜良 CTP さん) に返信
>
> category内の最大レコード数を4として
>
> Select category
> , Max(Case when no=1 then name else null end) name1
> , Max(Case when no=2 then name else null end) name2
> , Max(Case when no=3 then name else null end) name3
> , Max(Case when no=4 then name else null end) name4
> From (
> Select category,name
> , ROW_NUMBER() OVER(Partition By category order by id) no
> From テーブル) A
> Group By category
>
> こんなんでどうでしょう?
解決済み
引用返信 編集キー/
■55131 / inTopicNo.4)  Re[3]: SQL文で抽出した行をカテゴリごとに1行にするには?
□投稿者/ shu (187回)-(2010/11/17(Wed) 23:08:17)
No55128 (刈歩 菜良 CTP さん) に返信
> shu さん
>
> ありがとうございます。
> 結構力技っぽい感じにかできないんですねぇ。
> 最大レコード数が制限されてしまうのも厳しいですね。
>
> やっぱ、ストアドプロシージャがベストっぽいですね。
> ありがとうございました。
> <(_ _)>
>
ストアド使っても可変列にするのは難しいかと思います。
1列にカンマ区切りで設定するのなら簡単だとは思いますが。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -