【问题标题】:How do I split a row into two rows based on a column in TSQL如何根据 SQL 中的列将一行拆分为两行
【发布时间】:2020-11-04 21:12:02
【问题描述】:

我需要根据列字符串将一行拆分为两行。 知道什么可以用于此吗?

data
----
BBB, R
AAA, RT
CCC, T

这是我需要从选择中返回的内容

AAA, R
AAA, T
CCC, T
BBB, R

【问题讨论】:

  • 你试过什么?为什么它不起作用?或者,您做了哪些研究(可能是关于“如何在 SQL Server 中将字符串拆分为单个字符”)以及您不理解的哪些内容,以便我们帮助解释。
  • 我不同意标签recursive-query@GMB。有更多的性能方法,OP没有提及。

标签: sql sql-server string tsql


【解决方案1】:

您似乎想将字符串的每个字符放在一个新行上。一种选择使用递归查询:

with cte as (
    select col1, col2, 1 i from mytable
    union all
    select col1, col2, i + 1 from cte where i < len(col2) 
)
select col1, col2, substring(col2, i, 1) as new_col2 
from cte
order by col1

递归查询枚举字符串中的位置,然后外层查询提取对应的字符。

Demo on DB Fiddle

col1 | col2 | new_col2 :--- | :--- | :-------- AAA |转发 | R AAA |转发 |吨 血脑屏障 |右 | R CCC | T |吨

【讨论】:

    【解决方案2】:

    根据您的样本数据,一个非常直接的方法是:

    select v1.col1, v2.col2
    from t cross apply
         (values (left(t.data, 3))) v1(col1) cross apply
         (values (substring(t.data, 6, 1)),
                 (substring(t.data, 7, 1))
         ) v2(col2)
     where v.col2 <> '';
    

    Here 是一个 dbfiddle。

    【讨论】:

      猜你喜欢
      • 2016-04-10
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 2020-05-19
      相关资源
      最近更新 更多