根据sql server 2008中的列值显示行

穆克什·库马尔

我有列 col1 和 col2

Col1             col2
abc,def          xyz,xyz
abc1,def1        xyz1,xyz1

我需要如下输出

Col1             col2
abc              xyz,xyz
def              xyz,xyz
abc1             xyz1,xyz1
def1             xyz1,xyz1

也就是说,如果 col1 包含 2 个值 (abc,def) 而 col2 包含 2 个值 (xyz,xyz) 那么我需要 4 行。同样 col1 和 col2 包含 2 个值,那么我需要 9 行。

请帮我在sql server中获取输出

约翰·卡佩莱蒂

一点点 XML 和一个 CROSS APPLY

选项 1:没有拆分/解析函数

Declare @YourTable table (Col1 varchar(25),col2 varchar(25))
Insert Into @YourTable values
('abc,def','xyz,xyz'),
('abc1,def1','xyz1,xyz1')

Select col1 = B.RetVal
      ,col2 = A.col2
 From @YourTable A
 Cross Apply (
                Select RetSeq = Row_Number() over (Order By (Select null))
                      ,RetVal = LTrim(RTrim(B.i.value('(./text())[1]', 'varchar(max)')))
                From  (Select x = Cast('<x>' + replace((Select replace(A.Col1,',','§§Split§§') as [*] For XML Path('')),'§§Split§§','</x><x>')+'</x>' as xml).query('.')) as X
                Cross Apply x.nodes('x') AS B(i)
             ) B

退货

col1    col2
abc     xyz,xyz
def     xyz,xyz
abc1    xyz1,xyz1
def1    xyz1,xyz1

选项 2:使用拆分/解析功能

Select col1 = B.RetVal
      ,col2 = A.col2
 From @YourTable A
 Cross Apply [dbo].[udf-Str-Parse](A.col1,',') B

UDF 如果有兴趣

CREATE FUNCTION [dbo].[udf-Str-Parse] (@String varchar(max),@Delimiter varchar(10))
Returns Table 
As
Return (  
    Select RetSeq = Row_Number() over (Order By (Select null))
          ,RetVal = LTrim(RTrim(B.i.value('(./text())[1]', 'varchar(max)')))
    From  (Select x = Cast('<x>' + replace((Select replace(@String,@Delimiter,'§§Split§§') as [*] For XML Path('')),'§§Split§§','</x><x>')+'</x>' as xml).query('.')) as X
    Cross Apply x.nodes('x') AS B(i)
);
--Thanks Shnugo for making this XML safe
--Select * from [dbo].[udf-Str-Parse]('Dog,Cat,House,Car',',')
--Select * from [dbo].[udf-Str-Parse]('John Cappelletti was here',' ')
--Select * from [dbo].[udf-Str-Parse]('this,is,<test>,for,< & >',',')

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

根据SQL Server中的行值在查询中分隔列

来自分类Dev

根据SQL Server中的行值在查询中分隔列

来自分类Dev

根据列 SQL Server 中的最大值选择行

来自分类Dev

如何根据列的值在sql server中获取行

来自分类Dev

SQL Server 2008中列的不同值

来自分类Dev

如何在列sql server中显示行值?

来自分类Dev

如何在列sql server中显示行值?

来自分类Dev

SQL Server:根据条件设置行值

来自分类Dev

根据sql server中的值消除记录

来自分类Dev

根据SQL Server中的条件从表中检索列值

来自分类Dev

根据SQL Server中的条件从表中检索列值

来自分类Dev

SQL Server:根据上一行/ id中的值计算列值

来自分类Dev

如何根据sql server中其他列中的值插入新行?

来自分类Dev

SQL Server 2008根据值合并或测试行

来自分类Dev

根据 SQL Server 中的条件将列转换为行

来自分类Dev

在SQL Server 2008中跨列返回最大值

来自分类Dev

SQL Server 2008中基于计算列的新行

来自分类Dev

SQL Server 2008中基于计算列的新行

来自分类Dev

SQL Server:根据记录的值返回列名

来自分类Dev

根据 vb.net 中另一个 SQL Server 表中显示的行显示列

来自分类Dev

如何根据SQL Server 2008中的特定参数返回所需的手动值

来自分类Dev

根据条件在SQL Server中移动列

来自分类Dev

根据sql server中的条件计算行数

来自分类Dev

在SQL Server中,如何在列中显示表行的值?

来自分类Dev

根据列值返回 SQL Server 列名和对应值

来自分类Dev

如何在SQL Server 2008R2中将时间列值拆分为行

来自分类Dev

如何从表中选择一列,并根据SQL Server中该列中的值获得第n行?

来自分类Dev

如何根据 SQL Server 中的值存在来设置值?

来自分类Dev

根据表中最近创建的行查找值(SQL Server)

Related 相关文章

  1. 1

    根据SQL Server中的行值在查询中分隔列

  2. 2

    根据SQL Server中的行值在查询中分隔列

  3. 3

    根据列 SQL Server 中的最大值选择行

  4. 4

    如何根据列的值在sql server中获取行

  5. 5

    SQL Server 2008中列的不同值

  6. 6

    如何在列sql server中显示行值?

  7. 7

    如何在列sql server中显示行值?

  8. 8

    SQL Server:根据条件设置行值

  9. 9

    根据sql server中的值消除记录

  10. 10

    根据SQL Server中的条件从表中检索列值

  11. 11

    根据SQL Server中的条件从表中检索列值

  12. 12

    SQL Server:根据上一行/ id中的值计算列值

  13. 13

    如何根据sql server中其他列中的值插入新行?

  14. 14

    SQL Server 2008根据值合并或测试行

  15. 15

    根据 SQL Server 中的条件将列转换为行

  16. 16

    在SQL Server 2008中跨列返回最大值

  17. 17

    SQL Server 2008中基于计算列的新行

  18. 18

    SQL Server 2008中基于计算列的新行

  19. 19

    SQL Server:根据记录的值返回列名

  20. 20

    根据 vb.net 中另一个 SQL Server 表中显示的行显示列

  21. 21

    如何根据SQL Server 2008中的特定参数返回所需的手动值

  22. 22

    根据条件在SQL Server中移动列

  23. 23

    根据sql server中的条件计算行数

  24. 24

    在SQL Server中,如何在列中显示表行的值?

  25. 25

    根据列值返回 SQL Server 列名和对应值

  26. 26

    如何在SQL Server 2008R2中将时间列值拆分为行

  27. 27

    如何从表中选择一列,并根据SQL Server中该列中的值获得第n行?

  28. 28

    如何根据 SQL Server 中的值存在来设置值?

  29. 29

    根据表中最近创建的行查找值(SQL Server)

热门标签

归档