2

私は3つのテーブルを持っています。そのうちの 2 つを結合し、結合テーブルをピボットして、行の値を返す必要があります。明確にするために以下をお読みください。

Table 1:
t1ID   Title
01     Title 1
01_01  Title 1a
01_02  Title 1b
01_03  Title 1c
02     Title 2
02_01  Title 2a
02_02  Title 2b

... 等々

Table 2 (not used in my join, but shown to see relationship between 3 tables -- contains a fixed number of rows which is 10):
t2ID  Description
01    Desc A
02    Desc B
03    Desc C
...
10    Desc J


Table 3:
t1ID   t2ID  Value
01     01    A
01     02    B
...
01     10    C
01_01  01    D
01_01  02    E
...
02_01  10    F
02_02  01    G
02_02  02    H

...等々

t1ID表 1 がメインまたはマスターであり、表 3 が詳細な値を提供している場合、表 1 と表 3 を結合したいと思います。t2ID出力を適切に処理できるように、順序を維持するために表 3 をオンにする必要があります。

クエリ結果を次のようにしたいと思います。

row[0]    row[1]  row[2] ... row[10]
Title 1   A       B          C
Title 1a  D       E

したがって、各行には、出力配列の最初の項目をタイトルとして、次に出力配列の項目 2 から 11 を結合テーブル 3 から取得する必要があります。

それが理にかなっていることを願っています。

これについて私を助けてくれてありがとう。

修正済み (近づいているか、少なくとも派生エイリアス エラー メッセージが表示されなくなりました):

SELECT t1.t1ID, t1.Title, GROUP_CONCAT(t3.Value) AS value
FROM Table1 AS t1
JOIN Table3 AS t3 ON t3.t1ID = t1.t1ID
GROUP BY t3.t1ID
ORDER BY t1.t1ID

あとは、表 3 を t2ID ORDER でソートするだけです。

誰でもそれを手伝ってもらえますか?

4

2 に答える 2

2

You can sort group_concat() output as follows:

SELECT
    t1.t1ID,
    t1.Title,
    GROUP_CONCAT(t3.Value order by t2ID) AS value
FROM Table1 AS t1
JOIN Table3 AS t3 ON t3.t1ID = t1.t1ID
GROUP BY t3.t1ID
ORDER BY t1.t1ID

Notice the order by within the group_concat() call.

于 2013-02-22T14:41:18.373 に答える
1

MySQL でこれを簡単に行うことはできませんが、GROUP_CONCAT関数はおそらくうまくいくでしょう。クエリは次のようになります。

SELECT Title, GROUP_CONCAT(Value) AS values
FROM Table1 AS t1
    JOIN (
        SELECT t1ID, Value FROM Table3 ORDER BY t2ID ASC
    ) AS t2 USING(t1ID)
GROUP BY t1ID

このクエリの結果は次のようになります

Title    | values
---------|-------
Title 1  | A,B,C
Title 1a | D,E

その後、値の文字列を配列に分解できるはずです。実際にデータをピボットする必要がある場合は、この質問にさらに役立つ情報があります。

JOIN編集:ボヘミアンは正しく、サブクエリの代わりに a を使用するため、彼の方法は私の方法よりも優れています。

于 2013-02-21T22:19:28.633 に答える