dポイントプレゼントキャンペーン実施中!

次のようなテーブルがあったとき
no | name
1 | aaa
3 | bbb
4 | ccc
6 | ddd
(先頭はカラム名です)
以下のように出力するSQLは書けますでしょうか?
no1| name1 | no2| name2
1 | aaa | 3 | bbb
4 | ccc | 6 | ddd

A 回答 (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;
    • good
    • 0
この回答へのお礼

ありがとうございます。
なんとかできました。

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

お礼日時:2008/01/07 14:49

>無理を承知でお願いします。



ということであれば、SQLに何を使用しているか書くべきです。
SQLの本来の作業ではないので、SQLの種類やバージョンによって
書き方が大幅に異なります。

ロジックとしては、
(1)連番を振る
(2)連番を2でわって、あまり0が左、あまり1が右にくるようJOINする

なんてのでどうでしょう。
    • good
    • 0
この回答へのお礼

>ということであれば、SQLに何を使用しているか書くべきです。
確かにそのとおりでした。
SQL99でお願いします。

お礼日時:2008/01/07 14:32

それはSQLの仕事ではありません。


もちろん無理を承知でやることは不可能ではありませんが
できればミドルウェアやアプリケーション側でやってください。
    • good
    • 0
この回答へのお礼

無理を承知でお願いします。

お礼日時:2008/01/07 11:20

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