
できれば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件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
行と列が通常の呼称と逆ですね
行2の文字コード順に並べるということでよければ
TRANSFORM First(行2)
SELECT 行1
FROM 表1
GROUP BY 行1
PIVOT "行" & DCount("*","表1","行2<='" & [行2] & "' and 行1=" & [行1])+1;
No.3
- 回答日時:
行1も行2もテキスト型なら、
TRANSFORM First(行2) AS 行2の先頭
SELECT 行1
FROM 表1
GROUP BY 行1
PIVOT "行" & DCount("*","表1","行1='" & [行1] & "' And 行2<='" & [行2] & "'")+1;
では。
No.2
- 回答日時:
私はこのような場合、クロス集計クエリーを使いします。
(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.列見出し;
==================================================
以上です。
参考になればうれしいです。
No.1
- 回答日時:
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番目とか取りたいという意味なので、これも使えませんでした。
よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
INDIRECT関数の代替方法は?
-
他のシートの検索
-
Accessで複数(3以上)...
-
BULK INSERT時のNull許容について
-
DBの定義のサイズを大きくし過...
-
構造が異なる二つのテーブルをu...
-
カラムとコラムの使い分け
-
UNIONする際、片方テーブルしか...
-
インデックスについて
-
type date にnullをinsert
-
ホームページを作ろうと思いま...
-
AUTO_INCREMENTに0はダメ?
-
GREATESTで NULLをスルーする方...
-
now()かCURRENT_TIMESTAMPか
-
テーブルの列数を調べたい
-
ROUND関数で、四捨五入ができな...
-
ドロップダウンリストの連動し...
-
MySQL(5.5)1テーブル内のカラ...
-
【SQL】select に ワイルドカー...
-
SQL、oracleにて文字列操作(連...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
INDIRECT関数の代替方法は?
-
他のシートの検索
-
BULK INSERT時のNull許容について
-
【Transact-sql】 where条件、i...
-
自分自身のテーブルを参照して更新
-
列を行に表示する方法は?
-
Accessで複数(3以上)...
-
Accessの「IIF」に相当するSQL...
-
mongoDBについて質問です
-
ACCESS SQLのデータ変換。
-
SQLiteで「UPDATE table1 SET c...
-
sqlite3でrowid以外にid必要で...
-
【SQL文】 where (colA & colB)...
-
数百行の複数列を1列にしたい。
-
一部のカラムでdistinctし全て...
-
SELECT文で、指定カラム以外の...
-
UNIONする際、片方テーブルしか...
-
DBの定義のサイズを大きくし過...
-
ホームページを作ろうと思いま...
-
SQLServerでNULLを挿入したいです
おすすめ情報