sql cte 将两个结果合二为一

sql cte to join two results in one common

WITH group1 AS (
      SELECT item as Products
      from dbo.fnParseDelimitedString('mango,apple,pears,kiwi',',')
     ),
     group2 AS (
      SELECT item as Price
      from dbo.fnParseDelimitedString('.19,.45,.00,.59',',')
     )
 --select Products from group1
select Price
from group2

我想要一个结果加入两个 cte?

喜欢的产品||价格

Products || Price
apple   .45
kiwi    .59
mango   .19
pears   .00

在您编辑问题时,row_number() 可以帮助您并使用完全外部联接,否则如果任何列表大于其他两个 cte,它可能会忽略

WITH
group1 AS
(SELECT item as Products,
 row_number()over(order by item)rn from    dbo.fnParseDelimitedString('mango,apple,pears,kiwi',',')
),
group2 AS
(SELECT item as Price,
 row_number()over(order by item) rn from dbo.fnParseDelimitedString('.19,.45,.00,.59',',')
)
select t1.Products from group1 t1 
full outer join group2 t2 t1.rn=t2.rn

试试这个,如果它适合你:-

With CTE as
(
    SELECT ROW_NUMBER() over(order by a.item) as rownumber
    ,a.item as [Price]
    FROM dbo.fnParseDelimitedString('.19,.45,.00,.59',',') a
)
SELECT c.Fruit, a.Price
FROM CTE a
INNER JOIN 
(
    SELECT ROW_NUMBER() over(order by b.item) as rownumber
    ,b.item as [Fruit]
    FROM dbo.fnParseDelimitedString('mango,apple,pears,kiwi',',') b
)c on (a.rownumber = c.rownumber)

您需要将函数 dbo.fnParseDelimitedString() 修改为 return 项目编号。然后您可以使用它来加入:

WITH group1 AS (
      SELECT item as Product, item_number
      from dbo.fnParseDelimitedString('mango,apple,pears,kiwi',',')
     ),
     group2 AS (
      SELECT item as Price, item_number
      from dbo.fnParseDelimitedString('.19,.45,.00,.59',',')
     )
 --select Products from group1
select g1.product, g2.price
from group1 g1 join
     group2 g2
     on g1.item_number = g2.item_number;

不幸的是,SQL服务器内置的字符串拆分功能没有return这样一个序号的选项。

如果无法修改函数,还有其他方法可以解决。但是,因为你已经定义了这样一个函数,你还不如包含你真正需要的列。