【问题标题】:Use join table column in split function in SQL Server 2008在 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表吗?

【问题讨论】:

    标签: sql sql-server-2008 user-defined-functions


    【解决方案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 吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-01
      • 1970-01-01
      • 2014-05-11
      • 1970-01-01
      • 2012-08-11
      • 1970-01-01
      相关资源
      最近更新 更多