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这样一个序号的选项。
如果无法修改函数,还有其他方法可以解决。但是,因为你已经定义了这样一个函数,你还不如包含你真正需要的列。
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这样一个序号的选项。
如果无法修改函数,还有其他方法可以解决。但是,因为你已经定义了这样一个函数,你还不如包含你真正需要的列。