Sql server Pivot并从一个字段创建多个记录并拆分另一个字段

托马斯·罗恩斯

我的数据是什么样的:

Name:   Animals(One-Column):
Bill    Dog, Cat, Horse
Bob     Dog, Giraffe, Snake , Horse

我需要将其转换为:

Name:   Animal:
Bill    Dog
Bill    Cat
Bill    Horse
Bob     Dog
Bob     Giraffe
Bob     Snake
Bob     Horse

我不确定要采取的步骤,实际 csv 字段中有 0 - 100 个值。

您会注意到 csv 不一致(马是比尔的第 3 个字,而鲍勃的第 4 个字),所以我需要一个解决方案,例如:

1st Name  1st Word
1st Name  2nd Word
2nd Name  1st Word
2nd Name  2nd Word
2nd Name  3rd Word
...
查努卡
create function [dbo].[udf_splitstring] (@tokens    varchar(max),
                                         @delimiter varchar(5))
returns @split table (
  token varchar(200) not null )
as
  begin
      declare @list xml

      select @list = cast('<a>'
                          + replace(@tokens, @delimiter, '</a><a>')
                          + '</a>' as xml)

      insert into @split
                  (token)
      select ltrim(t.value('.', 'varchar(200)')) as data
      from   @list.nodes('/a') as x(t)

      return
  end



  CREATE TABLE #TABLE1
    ([NAME] VARCHAR(4), [ANIMALS] VARCHAR(27))
;

INSERT INTO #TABLE1
    ([NAME], [ANIMALS])
VALUES
    ('BILL', 'DOG, CAT, HORSE'),
    ('BOB', 'DOG, GIRAFFE, SNAKE , HORSE')
;
SELECT * FROM #TABLE1

SELECT NAME ,TOKEN FROM #TABLE1 AA
CROSS APPLY (SELECT * FROM UDF_SPLITSTRING(ANIMALS,','))A

输出

name    token
Bill    Dog
Bill    Cat
Bill    Horse
Bob     Dog
Bob    Giraffe
Bob    Snake 
Bob    Horse

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将数据从一个字段复制到SQL Server中不同行中的另一个字段

Microsoft SQL Server:触发以检查由另一个字段分组的一个字段的总和是否不超过特定值?

如何在SQL Server 2014中将结果从一个字段拆分为两个单独的字段

SQL Server:查询以在一个字段中获得多个结果

如何将一个字段中的日期与另一个字段中的时间结合在一起-MS SQL Server

SQL Server-从同一视图表中的其他字段创建值一个字段

SQL Server - 如果该字段已被透视,如何通过另一个字段再次透视?那数据库设计正确吗?

如何获取SQL Server 2014中至少一个字段有数字的记录?

如何将多行连接到SQL Server中的一个字段

SQL Server添加价格,数量与“分组依据”相同的ID,但在“分组依据”中具有另一个字段

每小时分组需要与以前的小时数据相加,并与SQL Server中的另一个字段相减

SQL Server:插入一个复杂的选择查询,其中一个字段是不同的

如何在 SQL Server 中添加上一个字段和下一个?

一个字段的Oracle SQL计数由另一个字段分组

sql-选择为一个字段记录相同的值,在另一个字段上记录不同的值

给定另一个字段的值,SQL 创建一个新的字段会话

SQL Server 删除最后一个字

SQL Server:当有多行时,仅基于一个字段选择一行

使用SQL根据记录中的另一个字段检索组合记录的字段值

如何确定一个字段在SQL Server 2008 R2中是否具有前导零?

SQL SERVER,使用 patIndex 查找另一个字符位置左侧的字符位置

从SQL Server中的另一个字符串获取仅字符字符串

SQL选择一个字段等于另一个字段,但中间有一个附加字符的地方

SQL:基于另一个字段的值的条件字段输出

SQL更新字段基于另一个字段的条件

SQL查询以获取一个字段为另一个特定字段重复的次数

BigQuery / SQL汇总来自一个字段,多个记录的数据

SQL:如果一个字段为空或为0,则选择另一个字段

如果第一个字段中有字母,SQL 如何加入另一个字段