sql - 使用分隔符在表中插入基于多个值的连接字符串
问题描述
我有一张这样的桌子:
ID | 价值1 | 价值2 | 价值3 | 细绳 |
---|---|---|---|---|
1 | 真的 | |||
2 | 真的 | 真的 | ||
3 | 真的 | 真的 |
我正在做一项转换工作,将上表转换为另一个只有字符串字段的表,字符串值将由值 + 一个“||”组成 如果有多个值为真,则作为分隔符。
for id 1, string = "value1"
for id 2, string = "value2||value3"
for id 3, string = "value1||value3"
我想在插入查询中的选择查询中执行此操作,可以吗?
我想过使用临时变量,但无法弄清楚。
解决方案
你可以使用CONCAT_WS
和一堆CASE
表达式
SELECT
Id,
CONCAT_WS('||',
CASE WHEN value1 = 'true' THEN 'value1' END,
CASE WHEN value2 = 'true' THEN 'value2' END,
CASE WHEN value3 = 'true' THEN 'value3' END)
FROM YourTable t
或者您可以在子查询中取消透视并重新聚合
SELECT
Id,
(
SELECT STRING_AGG(str, '||')
FROM (VALUES(
(value1, 'value1'),
(value2, 'value2'),
(value3, 'value3')
) v(val, str)
WHERE val = 'true'
)
FROM YourTable t
推荐阅读
- sas - 仅在满足特定条件时从 SAS 发送电子邮件
- sql - 在 R 中粘贴 SQL 查询的日期
- tfs - 基于项目和子文件夹的 TFS 工作项查询
- python - 张量流中随机森林损失的梯度
- airflow - 从 Cloud Composer 运行 java Google Dataflow 作业
- sql - MS Access - 尝试加入 3 个表时获取“输入参数值”
- json - 可以将 Postman 集合导出为 json 格式且测试未包含在事件中吗?
- php - 如何从每个父模型中获取 N 条记录?在 laravel 中雄辩
- c# - 从客户端获取 IP 地址,而不是前端服务器
- angular - 如何在 Angular 5 中使用 sassLoader includePaths?