将SQL表展平为单个CSV友好表

时间:2011-08-10 10:53:10

标签: mysql sql csv pivot

由于某些原因,我正在接管一个需要以CSV-friendly格式呈现的数据库。

目前存在三个表。一个具有对象的基本描述,例如:

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"

最后,第三个表在两者之间建立了连接:

id | ev_id
1  | 2
2  | 1

我需要的是将三者结合起来,这样事件表中的每一行都会在最终视图中生成一个列以及原始对象描述。如果发生了事件,则应在相应的单元格中插入1,否则为0或NULL。 E.g:

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

这可能使用SQL(MySQL)吗?

1 个答案:

答案 0 :(得分: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将相同数量的列添加到上述查询然后执行来动态构造查询。

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

希望这会有所帮助