【问题标题】:Insert a concat string based on multiple values in the table with delimiter使用分隔符在表中插入基于多个值的连接字符串
【发布时间】:2021-08-18 13:32:25
【问题描述】:

我有一张这样的桌子:

id value1 value2 value3 string
1 true
2 true true
3 true true

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

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

我想在insert查询里面的select查询里面做这个操作,可以吗?

我想过使用临时变量,但想不通。

【问题讨论】:

  • 只需构建一个产生所需结果的选择,然后将其转换为插入。一旦你尝试过了,如果你仍然被困住,请发布你的尝试让别人帮助你。
  • 在一个表(当前表)的多个列中存储相似的值或在单个列(新表)中存储多个值都是不好的设计。你应该重新考虑
  • 使用 if else 和动态 sql 构建选择查询并将其用于 insert 。如果之后有任何问题,请告诉我

标签: sql sql-server tsql


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-04
    • 2011-11-28
    • 2012-02-27
    • 1970-01-01
    • 1970-01-01
    • 2013-11-06
    相关资源
    最近更新 更多