1

失敗したデータベースからいくつかのテーブルを作り直しています。いくつかのテーブルには、異なるテーブル名を持つ同じデータがあり、それぞれのテーブルにも同様のデータがありますが、列名は異なります。とにかく、これは奇妙な要求ですが、これはこのようにダウンする必要があります。

2つの異なるテーブルから1つのレコードを作成できるように、1つの行をシミュレートするために行を上にピボットする必要があります。

写真を添付し​​ました。左側のテーブルは単一の行をプルし、左側のテーブルは左側のテーブルのIDに基づいて1〜n行を提供します。1つの行をシミュレートし、2つの結果で1つのレコードを作成するには、行を上にピボットする必要があります。

オンラインでのチェックから、ピボットは進むべき道のようですが、グループ化するか、ある種の集計を実行する必要があるようです。

これを行うための最良の方法は何ですか?

table1 ---Produces one row
table1id | col1 | col2 | col3
1    Wow    Wee    Zee

table2 ---Produces 1 - n rows
table2id | table1id | col1 | col2 | col3
1            1        sock   cloth  sup
2            1        bal    baa    zak
3            1         x      y    fooZ

このように表示する必要があります(以下は列名ではなく、結果セットです)

Woo,wee,zee,sock,cloth,sup,bla,baaa,zak,x,y,fooZ

ここに画像の説明を入力してください

4

1 に答える 1

1

MySQLを使用している場合:

SELECT a.table1id, GROUP_CONCAT(a.col) AS col_values
FROM
(
    SELECT table1id, col1 col FROM table1 UNION ALL
    SELECT table1id, col2     FROM table1 UNION ALL
    SELECT table1id, col3     FROM table1 UNION ALL
    SELECT table1id, col1     FROM table2 UNION ALL
    SELECT table1id, col2     FROM table2 UNION ALL
    SELECT table1id, col3     FROM table2
) a
GROUP BY a.table1id

SQLFiddleデモ


SQL-Serverを使用している場合:

SELECT a.table1id, b.colnames
FROM table1 a
CROSS APPLY
(
    SELECT STUFF((
        SELECT ',' + aa.col
        FROM
        (
            SELECT table1id, col1 col FROM table1 UNION ALL
            SELECT table1id, col2     FROM table1 UNION ALL
            SELECT table1id, col3     FROM table1 UNION ALL
            SELECT table1id, col1     FROM table2 UNION ALL
            SELECT table1id, col2     FROM table2 UNION ALL
            SELECT table1id, col3     FROM table2
         ) aa
         WHERE aa.table1id = a.table1id
         FOR XML PATH('')
    ), 1, 1, '') AS colnames
) b

SQLFiddleデモ

于 2012-07-29T03:58:05.787 に答える