首页 > 解决方案 > 使用分隔符在表中插入基于多个值的连接字符串

问题描述

我有一张这样的桌子:

ID 价值1 价值2 价值3 细绳
1 真的
2 真的 真的
3 真的 真的

我正在做一项转换工作,将上表转换为另一个只有字符串字段的表,字符串值将由值 + 一个“||”组成 如果有多个值为真,则作为分隔符。

for id 1, string = "value1"
for id 2, string = "value2||value3"
for id 3, string = "value1||value3"

我想在插入查询中的选择查询中执行此操作,可以吗?

我想过使用临时变量,但无法弄清楚。

标签: sqlsql-servertsql

解决方案


你可以使用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

推荐阅读