- ベストアンサー
同じ列に2行づつで出力するSQL
次のようなテーブルがあったとき no | name 1 | aaa 3 | bbb 4 | ccc 6 | ddd (先頭はカラム名です) 以下のように出力するSQLは書けますでしょうか? no1| name1 | no2| name2 1 | aaa | 3 | bbb 4 | ccc | 6 | ddd
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
列名は変更していますが、これは予約語を使いたくなかったからに過ぎません。 ID1__kname1__ID2__kname2 1_____aaa________3____bbb 4_____ccc________6____ddd SELECT ID1, kname1, ID2, kname2 FROM (SELECT [ID] AS ID1, [kname] AS kname1, DLookup("[ID]","tab1","ID>" & [ID]) AS ID2, DLookup("[kname]","tab1","ID>" & [ID]) AS kname2, DCount("*","tab1","ID<=" & [ID]) AS IDCount FROM tab1) AS Test WHERE (IDCount MOD 2)=1; Accessならば、こういうクエリでもOKです。 考え方としては、こういうことだと思います。 なお、一旦、登録すると次のようになるようです。 SELECT ID1, kname1, ID2, kname2 FROM [SELECT [ID] AS ID1, [kname] AS kname1, DLookup("[ID]","tab1","ID>" & [ID]) AS ID2, DLookup("[kname]","tab1","ID>" & [ID]) AS kname2, DCount("*","tab1","ID<=" & [ID]) AS IDCount FROM tab1]. AS Test WHERE (IDCount MOD 2)=1;
その他の回答 (2)
- yambejp
- ベストアンサー率51% (3827/7415)
>無理を承知でお願いします。 ということであれば、SQLに何を使用しているか書くべきです。 SQLの本来の作業ではないので、SQLの種類やバージョンによって 書き方が大幅に異なります。 ロジックとしては、 (1)連番を振る (2)連番を2でわって、あまり0が左、あまり1が右にくるようJOINする なんてのでどうでしょう。
お礼
>ということであれば、SQLに何を使用しているか書くべきです。 確かにそのとおりでした。 SQL99でお願いします。
- yambejp
- ベストアンサー率51% (3827/7415)
それはSQLの仕事ではありません。 もちろん無理を承知でやることは不可能ではありませんが できればミドルウェアやアプリケーション側でやってください。
お礼
無理を承知でお願いします。
お礼
ありがとうございます。 なんとかできました。 DLookUpはよく分かりませんが、以下のように書き直してうまくいきました。 SELECT ID AS ID1,KNAME AS KNAME1, (SELECT FIRST ID FROM TAB1 WHERE ID>ID1 ORDER BY ID) AS ID2, (SELECT FIRST KNAME FROM TAB1 WHERE ID>ID1 ORDER BY ID) AS KNAME2, (SELECT COUNT(*) FROM TAB1 WHERE ID<=ID1) AS CID FROM TAB1 WHERE MOD(CID,2)=1