- - PR -
SQLで1行から複数行を返却するSELECT文
1
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2006-11-20 23:23
どなたかご意見くださいませ。
SQLServer2000で。 コード 回数 --------------- A001 1 A002 2 A003 3 B001 1 --------------- この↑ような表から 「コード」に対応する「回数」の分だけ 「コード」と「SEQ(1〜「回数」の値まで)」を返却する 次↓のような表を返却するSQL文をかけますでしょうか。 コード SEQ --------------- A001 1 A002 1 A002 2 A003 1 A003 2 A003 3 B001 1 --------------- 何かよいアイディアをお持ちの方、 お力添えくださいませ。 よろしくお願い致します。 | ||||
|
投稿日時: 2006-11-21 12:53
SQLServerは使ったことがないのですが、
1から始まる連番をもったテーブルを作ればできないですかね。 SEQ ------- 1 2 3 ・ ・ ・ SEQ <= 回数 で結合すればご希望のデータが作れると思います。 検証していないのでダメダメだったらすみません。 データを読む側(プログラム)でやった方がいい気もしますが… | ||||
|
投稿日時: 2006-11-21 13:01
「コード」と「SEQ(1〜「回数」の値まで)」を返すSQL文が何故必要になるのか・・が知りたい気もしますが(汗
私もプログラム側の仕事にした方がいいと思います。SQLで出来たとしても後々悩みそうで・・。 | ||||
|
投稿日時: 2006-11-21 13:01
http://www7.big.or.jp/~pinball/discus/sqls/30321.html
クロスしてます | ||||
|
投稿日時: 2006-11-21 13:06
集計元の表を持っていないんじゃないですか? (意図的かは別にして)非正規化して捨てちゃったとか。 | ||||
|
投稿日時: 2006-11-22 17:06
皆様ご意見ありがとうございました。
> つんけん 様 アイディアをありがとうございます。 1から始まる連番をもったテーブルと結合は 案の1つでしたがMAXをどこまでもつかで悩みやめてしまいました。 > shimix 様 投稿した内容で得られた結果を1つのテーブルとして またさらに別のテーブルと結合した結果を得る必要があります。 その処理がプログラムで処理するにはちょっと重たい処理になるので (コードもレスポンスも) SQLでやりたいと思いました。 > oracle 様 こういった会議室に投稿するのが初めてでした。 多くの皆さんのご意見をうかがいたく 2つの会議室に同一の内容で投稿しました。 マナー違反でしたらお詫びいたします。 【解決策】 欲しい結果の形をユーザー定義関数の返却値とするようにし それをselectするようにしました。 ------------------------ CREATE FUNCTION TEST_FUNC RETURNS @結果 TABLE ( コード char(10) ,SEQ numeric(3,0) ) AS BEGIN DECLARE @Counter INTEGER DECLARE @コード char(10) DECLARE @回数 numeric(3,0) DECLARE CUR CURSOR FOR SELECT コード, 回数 FROM TABLE1 OPEN CUR FETCH NEXT FROM CUR INTO @コード, @回数 WHILE @@FETCH_STATUS = 0 BEGIN SET @Counter = 1 WHILE @Counter <= @回数 BEGIN INSERT INTO @結果 ( コード, SEQ ) VALUES ( @コード, @Counter ) SET @Counter = @Counter + 1 END FETCH NEXT FROM CUR INTO @コード, @回数 END RETURN END ------------------------ SELECT * FROM TEST_FUNC() | ||||
1
