我有一个包含如下所示的表的SQLite数据库,用于存储多对多关系:
ID_1|ID_2|工具
-|-|
1|2|x
1|2|y
1|3|x
1|3|z
2|3|x
2|3|y
2|3|z
前两列包含特征对的ID,最后一列包含与这些特征相关的工具名称。同一对特征可以与多个工具相关联。
我正在寻找一组查询来总结这个表,使它看起来像这样,而不修改数据库结构。
ID_1|ID_2|x|y|z
-|
1|2|1|1|0
1|3|1|0|0
2|3|1|1|1
为每个唯一的工具名称显示一个新列,如果工具与ID对没有关联,则包含0,如果与ID对关联,则包含1。并且每对ID只有一行。
是否有允许这样做的命令组合?
我尝试使用多个Case WHERE语句,但我遇到了这种结果(这里是一个简化的示例):
CREATE TABLE IF NOT EXISTS test_table (
ID_1 integer NOT NULL,
ID_2 integer NOT NULL,
tool string NOT NULL
)
INSERT INTO test_table (ID_1, ID_2, tool)
VALUES
(1,2,"x"), (1,2,"y"), (1,3,"x"), (1,3,"z"), (2,3,"x"), (2,3,"y"), (2,3,"z")
SELECT *,
CASE WHEN tool == "x" THEN 1 ELSE 0 END AS x,
CASE WHEN tool == "y" THEN 1 ELSE 0 END AS y,
CASE WHEN tool == "z" THEN 1 ELSE 0 END AS z
FROM test_table
ID_1|ID_2|x|y|z
-|
1|2|1|0|0
1|2|0|1|0
1|3|1|0|0
1|3|0|0|1
2|3|1|0|0
2|3|0|1|0
2|3|0|0|1
1条答案
按热度按时间1rhkuytd1#
您可以使用条件聚合:
对于SQLite,它可以简化为:
请参阅demo。