【问题标题】:SQL Server : concatenate data result in to a table formatSQL Server:将数据结果连接成表格格式
【发布时间】:2013-11-22 19:57:48
【问题描述】:

我使用的是 SQL Server 2008。我有一个名为 func_SPLIT(@Str as varchar(2000)) 的拆分函数,它将接受像“123、456、789”这样的字符串并将它们拆分为如下表格格式:

Column: 
123
456
789

所以,如果我选择一个记录,我可以将该字符串拆分为表格格式...稍后加入它们...

这是一个我正在尝试解决的问题。

假设,我有一个查询:

Select Column1, Column2 
from Table1

它返回多条记录如下:

Column1     Column2
a           11111, 22222, 33333
b           44444
c           55555, 66666
d           88888, 99999

有没有办法可以将 Column2 中的所有这些值转换为表格格式,以便以后加入它们……如下面的格式:

Column1     Column2
a           11111
a           22222
a           33333
b           44444
c           55555
c           66666
d           88888
d           99999

这里是分割函数

ALTER FUNCTION [dbo].[Split]
(    
    @RowData NVARCHAR(MAX),
    @Delimeter NVARCHAR(MAX)
)
RETURNS @RtnValue TABLE 
(
    ID INT IDENTITY(1,1),
    Data NVARCHAR(MAX)
) 
AS
BEGIN 
    DECLARE @Iterator INT
    SET @Iterator = 1

    DECLARE @FoundIndex INT
    SET @FoundIndex = CHARINDEX(@Delimeter,@RowData)

    WHILE (@FoundIndex>0)
    BEGIN
        INSERT INTO @RtnValue (data)
        SELECT 
            Data = LTRIM(RTRIM(SUBSTRING(@RowData, 1, @FoundIndex - 1)))

        SET @RowData = SUBSTRING(@RowData,
                @FoundIndex + DATALENGTH(@Delimeter) / 2,
                LEN(@RowData))

        SET @Iterator = @Iterator + 1
        SET @FoundIndex = CHARINDEX(@Delimeter, @RowData)
    END

    INSERT INTO @RtnValue (Data)
    SELECT Data = LTRIM(RTRIM(@RowData))

    RETURN
END

谢谢,

【问题讨论】:

  • 我们可以看看你的分割功能吗?
  • 更新了拆分功能。感谢您对此进行调查...

标签: sql sql-server sql-server-2008


【解决方案1】:

你可以使用CROSS APPLY加入:

SELECT Column1, Data
FROM MYTABLE CROSS APPLY dbo.Split(Column2, ',')

演示:http://sqlfiddle.com/#!3/4e15d/1

【讨论】:

    猜你喜欢
    • 2012-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多