【问题标题】:Duplicate and Split Row based on value by using SQL Query?使用 SQL 查询根据值复制和拆分行?
【发布时间】:2019-03-14 16:43:08
【问题描述】:

我有一组数据,想根据列值拆分多行。

例如,

源数据:

预期输出:

谢谢, 劳伦斯A

【问题讨论】:

  • 能否更改表格或源数据的设计?因为这将是比将字符串分成 2 列更好的解决方案。
  • 添加了我正在使用的数据库
  • 更新了表格设计

标签: sql sql-server split


【解决方案1】:

解决上述问题的最佳和简单方法是

选择值作为 UID、姓名、年龄、教育、部门

来自 StackSoln

交叉应用 string_split(UID,',')

STRING_SPLIT

一个表值函数,它根据指定的分隔符将字符串拆分为多行子字符串。

交叉申请

仅返回从表值函数产生结果集的外部表中的行。换句话说,CROSS APPLY 的结果不包含左侧表表达式中没有从右侧表表达式中获得任何结果的任何行。 CROSS APPLY 作为逐行 INNER JOIN 工作

【讨论】:

    【解决方案2】:

    假设sql-server 大于或等于2016 版本。那么就可以使用string_split()函数了:

    select spl.u_id, s.name us_uid, s.age col_1, s.dob col_2, s.education col_3, s.department col_4 from @source s
        cross apply( select value u_id from string_split( (select u_id from @source s2 where s2.u_id = s.u_id ),',')
                    where CHARINDEX(value,s.u_id,1) > 0) spl 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-28
      • 2022-07-19
      • 2019-08-02
      • 2016-04-10
      相关资源
      最近更新 更多