DDL
我想知道如何连接某些键的值。示例数据:
id | 键 | 值|
---|---|---|
1 | 名称 | Alex|
1 | 状态 | 单个 |
1 | 年龄 | 21 |
1 | 收入 | <20K>|
1 | 高度 | 85 |
2 | 名称 | 大卫 |
2 | 状态 | 单个 |
2 | 年龄 | 23 |
2 | 收入 | <100>|
2 | 高度 | 75 |
如果我理解正确,您有一个键的动态列表,如name, age, hight
,并且您希望按每个用户显示这些值。
您需要使用聚合和string_agg
:
select id, string_agg(
"value", ','
) within group (order by charindex(',' + "key" + ',', ',name,age,hight,')) as csv
from t
where "key" in ('name', 'age', 'hight')
group by id
CREATE TABLE person (
p_id INT AUTO_INCREMENT PRIMARY KEY,
p_name VARCHAR(255) NOT NULL
);
INSERT INTO person (p_name) VALUES ("Alex"), ("David"), ("Kate"), ("Lisa"), ("Maya");
您需要的查询。有更多选项可供选择,因此您可能想阅读GROUP_CONCAT()
SELECT GROUP_CONCAT(p_name SEPARATOR ', ') as "string"
FROM person
WHERE p_id IN (2, 4, 5);
预期输出:
string |
---|
David、Lisa、Maya |