在 SQL Server 2008 的拆分函数中使用连接表列

Posted

技术标签:

【中文标题】在 SQL Server 2008 的拆分函数中使用连接表列【英文标题】:Use join table column in split function in SQL Server 2008 【发布时间】:2016-11-14 03:07:58 【问题描述】:

我有一个在 SQL 中运行良好的 split 函数。

Users 表有一列 experience,其中包含逗号分隔的字符串作为值,如下所示

ID   |  Exp
---------------------------
1    | C#,WEBAPI,SQL
2    | ASP.Net,MVC,html,CSS
3    | HTML,CSS,javascript

我正在尝试:

Select 
    U.ID, B.Text
From 
    Users U, 
    Split(U.Exp, ',') B

因为我需要这样的结果:

ID   |  Exp
---------------------------
1    | C#
1    | WEBAPI
1    | SQL
2    | ASP.Net
2    | MVC
2    | HTML
2    | CSS
3    | HTML
3    | CSS
3    | JavaScript

知道如何在join函数中使用join表吗?

【问题讨论】:

【参考方案1】:

您正在寻找cross apply:

Select U.ID, B.Text
From Users U cross apply
     dbo.Split(U.Exp, ',') B(Text);

如果您想保留U 中的所有行,即使U.Exp 为空,那么您将使用outer apply

【讨论】:

【参考方案2】:

应该是这样的

Select U.ID, B.Text
From Users U
CROSS APPLY dbo.Split(U.Exp, ',') B

顺便说一句:OUTER APPLY 无论如何都会加入他们所有人...

【讨论】:

总是报错:Msg 4104, Level 16, State 1, Line 5 无法绑定多部分标识符“U.Exp”。我已经通过使用 , 代替交叉连接(两者相同)使用相同的查询 应该改为CROSS APPLY 吗?

以上是关于在 SQL Server 2008 的拆分函数中使用连接表列的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 2008 T-SQL UDF Split() 剪裁

深入浅出SQL Server 2008 分区函数和分区表

SQL Server 2008 R2 将一行结果拆分为两行

拆分字符串并为 SQL Server 2008 R2 中表中的所有记录填充表

拆分逗号分隔参数传递给SQL Server 2008 R2中的存储过程

SQL Server (2008) UNION 与 ROLL UP