我正在尝试使用唯一列值作为列名来形成一个表,我不知道该怎么做。值将为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电子表格类型视图,原因。
谢谢!
答案 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必须显式地命名将在结果中的所有列,并且查询必须在开始读取数据之前命名它们。查询无法动态地将列添加到结果集中。
因此,您需要分两步执行数据透视表:
在SQL中没有这方面的捷径。