2011-08-10 17 views
0

何らかの理由でCSV-friendlyフォーマットで提示する必要があるデータベースを引き継ぎます。SQLテーブルを単一のCSVフレンドリーなテーブルにまとめる

現在、3つのテーブルが存在します。オブジェクトの基本的な説明を1つ、例えば:

id | date  | name 
1 | 2008-10-10 | Maestro 
2 | 2008-10-12 | Domo 

それから私は、イベントの種類と説明を含む別のテーブルを持っている:

ev_id | desc | desc2 
1  | Event1 | "Something less good happened" 
2  | Event2 | "Something good happened" 

最後に3番目のテーブルが2つの間の接続を行う:

id | ev_id 
1 | 2 
2 | 1 

私が必要とするのは、イベントテーブルの各行が元のオブジェクトの説明とともに最終ビューの列を生成するように、3つを組み合わせることです。イベントが発生した場合は、対応するセルに1を挿入し、そうでない場合は0またはNULLを挿入します。例:

id | date  | name | Event1 | Event2 
1 | 2008-10-10 | Maestro | 0  | 1 
2 | 2008-10-12 | Domo | 1  | 0 

これはSQL(MySQL)を使用して可能ですか?

答えて

0
SELECT A.*, 
     (CASE WHEN B.ev_id = 1 THEN 1 ELSE 0 END) EVENT_1, 
     (CASE WHEN B.ev_id = 2 THEN 1 ELSE 0 END) EVENT_2, 
     ......... 
     ......... 
     (CASE WHEN B.ev_id = N THEN 1 ELSE 0 END) EVENT_N, 
FROM table1 A JOIN table2 B 
ON  A.id = B.id 

MySQLでこれを実行する唯一の方法は、動的SQLを使用してイベントマスタテーブル内のイベントの数をループし、次いで上記のクエリに同じ数の列を追加することによってdynamiciallyクエリを構築することです実行する。

SET @S = ' <construct the query> like the sample above '; 
PREPARE n_StrSQL FROM @S; 
EXECUTE n_StrSQL; 
DEALLOCATE PREPARE n_StrSQL; 

希望これは、列の変換に行を行うには、forxml方法をピボットを使用することができますWER MSSQLサーバーについて

+0

に役立ちます。 – Baaju

関連する問題