【问题标题】:How can I separate data on the basis of a delimeter in SQL or Python?如何根据 SQL 或 Python 中的分隔符分隔数据?
【发布时间】:2021-12-10 13:53:49
【问题描述】:

我输入的数据如下:

Column1       Column2                                                   Column3
Silver        Bridge;#400;#Pool;#410;#Garden;#427;#Lawn;#591;#Shed;#1337    Aaron
Diamond       Meadow;#492                                                   Mike
Gold          Gas;#360;#Electricity;#1991                                   Judy

我需要得到如下输出:

Column1      Column2      NewColumn     Column3
Silver       Bridge        400          Aaron
Silver       Pool          410          Aaron
Silver       Garden        427          Aaron
Silver       Lawn          591          Aaron
Silver       Shed          1337         Aaron
Diamond      Meadow        492          Mike
Gold         Gas           360          Judy
Gold         Electricity   1991         Judy

注意:这里用于分隔数据的分隔符是';#'。尝试在第一次出现分隔符 (;#) 后创建一个新列,并在第二次出现后创建一行,它应该继续为数据单元格。

解决方案可以是 SQL 或 Python,但最好是 SQL。 我尝试了一些东西,但在输出中我能够以列或行分隔,但是在这里我们需要在列和行中交替分隔。我认为这可以通过运行循环来完成,但到目前为止没有任何效果。

【问题讨论】:

  • 到目前为止你有什么尝试?
  • 请不要发布文字图片!
  • 这是我的第一个问题,我不知道如何添加表格
  • 我在 HQL 中尝试了以下操作:“lateral view outer explode(split(seq,'\\|')) t1 as p”,但它只在列中分隔,我需要获取数字到下一个列,但下一行中的文本,如我所需的输出数据中所示
  • 您不会将图片输入 Python 或 SQL。所以请以可读的格式发布数据,计算机和人类都可读。

标签: python sql sql-server database hiveql


【解决方案1】:

SQL Server 中的一个选项是在 CROSS APPLY 中使用一点 JSON 和条件聚合

示例或dbFiddle

Select A.Column1 
      ,B.Column2
      ,B.NewColumn
      ,A.Column3
 From  YourTable A
 Cross Apply (
                Select Column2   = max(case when [Key] % 2 = 0 then Value end)
                      ,NewColumn = max(case when [Key] % 2 = 1 then Value end)
                 From  OpenJSON( '["'+replace(string_escape([Column2],'json'),';#','","')+'"]' )
                 Group By [Key] / 2
             ) B

结果

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-25
    • 1970-01-01
    • 2018-03-10
    • 1970-01-01
    相关资源
    最近更新 更多