Csv 使用交叉应用-如何连接表以交叉应用连接

Csv 使用交叉应用-如何连接表以交叉应用连接,csv,split,cross-apply,ssms-2017,Csv,Split,Cross Apply,Ssms 2017,如何将交叉应用返回的值作为值 下面的代码将一个值作为CSV存储在一列中,并使用字符串_SPLIT()将其拆分为表返回。我只是想重新连接这些值,因为它们是“表格形式”。目前,我只能通过在查询下面使用另一个CTE来实现这一点,该CTE将这些逗号分隔的值拆分出来。我非常确定,不需要另一个CTE就可以直接连接表数据 下面的代码使用CTE生成假数据。可重复性很强 Gif显示问题 我不敢相信,但答案太简单了,我几乎不好意思问了。基本上,我只需要为STRING_SPLIT()函数返回的表加上别名。我只是没有

如何将交叉应用返回的值作为

下面的代码将一个值作为CSV存储在一列中,并使用字符串_SPLIT()将其拆分为表返回。我只是想重新连接这些值,因为它们是“表格形式”。目前,我只能通过在查询下面使用另一个CTE来实现这一点,该CTE将这些逗号分隔的值拆分出来。我非常确定,不需要另一个CTE就可以直接连接表数据

下面的代码使用CTE生成假数据。可重复性很强

Gif显示问题
我不敢相信,但答案太简单了,我几乎不好意思问了。基本上,我只需要为STRING_SPLIT()函数返回的表加上别名。我只是没有把函数当作一个表来“思考”,但因为它是作为一个表返回的,所以我可以将它作为别名,然后利用其中的字段

这里的关键是别名:

交叉应用字符串\u分割(fd.multi\u select,,)
给它一个别名
csv

下面显示如何执行此操作的新代码:


我不敢相信,但答案是如此简单,我几乎不好意思问它。基本上,我只需要为STRING_SPLIT()函数返回的表加上别名。我只是没有把函数当作一个表来“思考”,但因为它是作为一个表返回的,所以我可以将它作为别名,然后利用其中的字段

这里的关键是别名:

交叉应用字符串\u分割(fd.multi\u select,,)
给它一个别名
csv

下面显示如何执行此操作的新代码:

WITH fake_data AS
(
    SELECT 1 as pkey, 'Billy' as name, 'FE,BF,AF,JF,AA' AS multi_select
)
, lookupTable AS
(
    SELECT 'Forever'   AS lookupValue, 'FE' AS lookupItem UNION ALL
    SELECT 'BoyFriend' AS lookupValue, 'BF' AS lookupItem UNION ALL
    SELECT 'AsFriend' AS lookupValue, 'AF' AS lookupItem
)

, csvToTable AS
(
SELECT value AS lookupItem
FROM fake_data fd
    CROSS APPLY STRING_SPLIT(fd.multi_select, ',')
    /* How do I make the below Left Join Work? */
    --LEFT JOIN lookupTable lt ON lt.lookupItem = fd.value
)

SELECT *
FROM csvToTable csv
--  LEFT JOIN lookupTable lt ON csv.lookupItem = lt.lookupItem
WITH fake_data AS
(
    SELECT 1 as pkey, 'Billy' as name, 'FE,BF,AF,JF,AA' AS multi_select
)
, lookupTable AS
(
    SELECT 'Forever'   AS lookupValue, 'FE' AS lookupItem UNION ALL
    SELECT 'BoyFriend' AS lookupValue, 'BF' AS lookupItem UNION ALL
    SELECT 'AsFriend' AS lookupValue, 'AF' AS lookupItem
)

SELECT fd.pkey, fd.name, value
FROM fake_data fd
    CROSS APPLY STRING_SPLIT(fd.multi_select, ',') csv
    LEFT JOIN lookupTable lt ON lt.lookupItem = csv.value