1

列を行に転置する際に問題に直面しています。ピボットでは、表示したい方法で結果が得られないようです。

n 個の行を持つサンプル データ パターンを次に示します。

Coulmn1      Column2
Customer     C1
Account      A1
Transaction  T1
Transaction  T2
Transaction  T3
Account      A2
Transaction  T11
Transaction  T12
Transaction  T13
Customer     C2
Account      A11
Transaction  T111
Transaction  T112
Transaction  T113
Account      A12
Transaction  T1111
Transaction  T1112
Transaction  T1113

以下の形式に転置したいと思います

Customer  Account  Transaction
C1        A1       T1
C1        A1       T2
C1        A1       T3
C1        A2       T11
C1        A2       T12
C1        A2       T13
C2        A11      T111
C2        A11      T112
C2        A11      T113
C2        A12      T1111
C2        A12      T1112
C2        A12      T1113
4

1 に答える 1

1

これが、やりたいことのMySQLバージョンです。相関サブクエリを使用して、顧客とアカウントの情報を取得します。

select t.Column1,
       (select column2 from t t2 where t2.column1 = 'Customer' and t2.id <= t.id order by t2.id desc limit 1
       ) as customer,
       (select column2 from t t2 where t2.column1 = 'Account' and t2.id <= t.id order by t2.id desc limit 1
       ) as transaction,
from t
where t.column1= 'Transaction'

これは、行を並べ替えるための id 列があることを前提としています。そうでない場合は、SQL テーブルは本質的に順序付けされていないため、そのような列 (ID またはタイムスタンプ) を取得する方法を見つける必要があります。

ロジックは他のデータベースでも同様です。ただし、limit 1構文は の代わりにselect top 1またはwhere rownum = 1またはの場合がありますfetch only 1 row

于 2013-03-01T14:31:58.557 に答える