- 締切済み
列を行に表示する方法は?
できればSQL文で作りたいと思っています。 表1 行1 行2 == == 1 A 1 B 1 C 2 A 2 D 行1で同一の値のものは10個しかないと決まっています。 (つまり行1=1のものは10列まで) これを次のように表示したいと思っています。 行1 行2 行3 行4 == == == == 1 A B C 2 A D Access+SQL*Serverを使っています。このようなViewをつくるSQLが発行できればベスト。関数とか使ってでもなんとかできないでしょうか? SQLの実行結果のレコードを順番に配列に入れるとかしかいと無理でしょうか? レコード結果はFirst,Lastを使って先頭と最後だけは取り出せるのですが、2番目~9番目も取り出す関数があったら、それをSQLに組み入れるだけで済むのですが。 どうぞ、よろしくお願いします。m(○)m
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- CHRONOS_0
- ベストアンサー率54% (457/838)
行と列が通常の呼称と逆ですね 行2の文字コード順に並べるということでよければ TRANSFORM First(行2) SELECT 行1 FROM 表1 GROUP BY 行1 PIVOT "行" & DCount("*","表1","行2<='" & [行2] & "' and 行1=" & [行1])+1;
- karihone
- ベストアンサー率100% (1/1)
行1も行2もテキスト型なら、 TRANSFORM First(行2) AS 行2の先頭 SELECT 行1 FROM 表1 GROUP BY 行1 PIVOT "行" & DCount("*","表1","行1='" & [行1] & "' And 行2<='" & [行2] & "'")+1; では。
- KAERU_VXV
- ベストアンサー率60% (18/30)
私はこのような場合、クロス集計クエリーを使いします。 (1)テーブル「表1」に項目「列見出し」を作成します。(テキスト型) (2)次のファンクションを実行して「列見出し」をセットします。 ====================================================== Public Function FNT_列見出し() Dim DB As Database Dim R As Recordset SQL = "SELECT * FROM 表1 ORDER BY 行1, 行2" Set DB = CurrentDb Set R = DB.OpenRecordset(SQL, dbOpenDynaset) If R.EOF = False Then WK_行1 = R![行1] cnt = 0 Do Until R.EOF If WK_行1 = R![行1] Then cnt = cnt + 1 Else cnt = 1 WK_行1 = R![行1] End If R.Edit R![列見出し] = "行" & cnt + 1 R.Update R.MoveNext Loop R.Close End If End Function ====================================================== (3)次のクロス集計クエリーを表示すると結果が得られます。 ================================================== TRANSFORM First(表1.行2) AS 行2の先頭 SELECT 表1.行1 FROM 表1 GROUP BY 表1.行1 PIVOT 表1.列見出し; ================================================== 以上です。 参考になればうれしいです。
- O_cyan
- ベストアンサー率59% (745/1260)
Access上なら TRANSFORM First(表1.行2) AS 行 SELECT 表1.行1 FROM 表1 GROUP BY 表1.行1 PIVOT 表1.行2; でクロス集計で似たような感じでできますがこれじゃダメなんですよね。 >先頭と最後だけは取り出せるのですが、2番目~9番目も取り出す関数 SELECT 行1,行2 FROM 表1 ROWNUM <=9 で先頭から9行目まで取得
お礼
ありがとうございます。 この方法だと、表1で違うデータの分だけフィールドがついてしまいます。 つくりたいのは、フィールド数は10個と決まっています。なんとかなりませんか? ROWNUM でも、表1で行1でグループした中からselectしその結果のレコードの2番目とか取りたいという意味なので、これも使えませんでした。 よろしくお願いします。