MYSQL - 真/假动态数据透视表

时间:2017-08-16 22:39:34

标签: mysql pivot-table

我正在尝试使用唯一列值作为列名来形成一个表,我不知道该怎么做。值将为true或false / null。

以下是设置:

项目

postgres:9.6.4

PROJECT_TAGS

ProjectID   | ....
---------------------------
1111        | .....
2222        | .....

tag_names加

TagID  | ProjectID | TagDefID (TagNameID fkey)
-----------------------------
1      | 1111      | 5
2      | 1111      | 6
3      | 2222      | 5

RESULT

TagNameID | TagName
-----------------------------
5         | Is Really Cool
6         | Is Awesome

现在棘手的部分是随着时间的推移将添加额外的标签类型。对每个项目ID进行迭代似乎非常粗暴和缓慢,所以我希望有一些神奇的SQL技巧来解决这个问题。基本上我需要制作数据库的XML电子表格类型视图,原因。

谢谢!

1 个答案:

答案 0 :(得分:0)

你可以这样做一个数据透视表:

SELECT P.ProjectID,
  MAX(CASE WHEN PT.TagDefID=5 THEN true END) AS `Is Really Cool`,
  MAX(CASE WHEN PT.TagDefID=6 THEN true END) AS `Is Awesome`
FROM PROJECTS AS P
LEFT OUTER JOIN PROJECT_TAGS AS PT ON P.ProjectID = PT.ProjectID
GROUP BY P.ProjectID;

对于它在数据中发现的标记,SQL没有特殊的魔力。原因是SQL select-list必须显式地命名将在结果中的所有列,并且查询必须在开始读取数据之前命名它们。查询无法动态地将列添加到结果集中。

因此,您需要分两步执行数据透视表:

  1. 查询可能的标签。
  2. 使用每个标记一列格式化SQL查询。
  3. 在SQL中没有这方面的捷径。