SQL объединить два результата в одном общем - PullRequest
0 голосов
/ 26 февраля 2019
WITH group1 AS (
      SELECT item as Products
      from dbo.fnParseDelimitedString('mango,apple,pears,kiwi',',')
     ),
     group2 AS (
      SELECT item as Price
      from dbo.fnParseDelimitedString('$3.19,$2.45,$5.00,$2.59',',')
     )
 --select Products from group1
select Price
from group2

я хочу получить один результат, присоединившись к cte?

Like Products ||Цена

Products || Price
apple   $2.45
kiwi    $2.59
mango   $3.19
pears   $5.00

Ответы [ 3 ]

0 голосов
/ 26 февраля 2019

Попробуйте, если это работает для вас: -

With CTE as
(
    SELECT ROW_NUMBER() over(order by a.item) as rownumber
    ,a.item as [Price]
    FROM dbo.fnParseDelimitedString('$3.19,$2.45,$5.00,$2.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)
0 голосов
/ 26 февраля 2019

Вам нужно исправить свою функцию dbo.fnParseDelimitedString(), чтобы вернуть номер элемента.Затем вы можете использовать это для присоединения:

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('$3.19,$2.45,$5.00,$2.59',',')
     )
 --select Products from group1
select g1.product, g2.price
from group1 g1 join
     group2 g2
     on g1.item_number = g2.item_number;

К сожалению, встроенная в SQL Server функция разделения строк не имеет возможности вернуть такой порядковый номер.

Если вы не можете изменитьфункция, есть другие подходы, чтобы решить эту проблему.Однако, поскольку вы определили такую ​​функцию, вы также можете включить столбцы, которые вам действительно нужны.

0 голосов
/ 26 февраля 2019

Поскольку вы редактировали вопрос, 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('$3.19,$2.45,$5.00,$2.59',',')
)
select t1.Products from group1 t1 
full outer join group2 t2 t1.rn=t2.rn
...