【问题标题】:SQL Server: Transpose Column to RowsSQL Server:将列转置为行
【发布时间】:2020-09-08 19:12:01
【问题描述】:

我有这样的表格数据。

    Seq,File
    ----------
    1,'100001-01-02-03-05.xls'
    2,'100002-01-02-03-09.doc'

我需要将上面的表格结构转换成这样的单个行,如何将普通的 Pivot 组合成这种格式。

     Seq, ID, File
     --------------
     1, 100001-01,'100001-01-02-03-05.xls'
     2, 100001-02,'100001-01-02-03-05.xls'
     3, 100001-03,'100001-01-02-03-05.xls'
     4, 100001-05,'100001-01-02-03-05.xls'
     5, 100002-01,'100002-01-02-03-09.doc'
     6, 100002-02,'100002-01-02-03-09.doc'
     7, 100002-03,'100002-01-02-03-09.doc'
     8, 100002-09,'100002-01-02-03-09.doc'

【问题讨论】:

    标签: transpose


    【解决方案1】:

    您可以使用 CROSS APPLY 和 STRING_SPLIT 函数:

    select 
      seq,
      substring(filename, 0, charindex('-',filename)+1) + value,
      filename
    from files
      cross apply string_split(
        substring(
          filename, 
          charindex('-',filename) + 1, 
          charindex('.',filename)-charindex('-',filename)-1
        ),
        '-'
      )
    

    link to fiddle

    有关查询如何工作的详细信息:

    1. 在 select 子句中,substring(filename, 0, charindex('-',filename)+1) 负责获取 ID 前缀,例如100002-
    2. 在 select 子句中,value 由 string_split 函数提供,例如01-02-03-05 分为四行,其值为 01020305
    3. 最后一个子字符串通过获取第一个 - 和最后一个 . 之间文件名的子字符串,为 string_split 函数提供输入值,例如100001-01-02-03-05.xls 变为 01-02-03-05

    【讨论】:

      猜你喜欢
      • 2013-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-24
      • 2010-10-22
      • 2013-02-12
      • 1970-01-01
      相关资源
      最近更新 更多