10代と話して驚いたこと

できれば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

A 回答 (4件)

行と列が通常の呼称と逆ですね


行2の文字コード順に並べるということでよければ

TRANSFORM First(行2)
SELECT 行1
FROM 表1
GROUP BY 行1
PIVOT "行" & DCount("*","表1","行2<='" & [行2] & "' and 行1=" & [行1])+1;
    • good
    • 1

 行1も行2もテキスト型なら、



TRANSFORM First(行2) AS 行2の先頭
SELECT 行1
FROM 表1
GROUP BY 行1
PIVOT "行" & DCount("*","表1","行1='" & [行1] & "' And 行2<='" & [行2] & "'")+1;

では。
    • good
    • 0

私はこのような場合、クロス集計クエリーを使いします。



(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.列見出し;
==================================================

以上です。
参考になればうれしいです。
    • good
    • 0

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行目まで取得
    • good
    • 0
この回答へのお礼

ありがとうございます。
この方法だと、表1で違うデータの分だけフィールドがついてしまいます。
つくりたいのは、フィールド数は10個と決まっています。なんとかなりませんか?

ROWNUM でも、表1で行1でグループした中からselectしその結果のレコードの2番目とか取りたいという意味なので、これも使えませんでした。
よろしくお願いします。

お礼日時:2006/06/07 14:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報