【问题标题】:sql cte to join two results in one commonsql cte 将两个结果合二为一
【发布时间】:2019-02-26 08:09:08
【问题描述】:
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?

喜欢的产品 ||价格

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

【问题讨论】:

  • 向我们展示预期的结果。 (请格式化文本,而不是图像。)
  • 预期输出是 Products||Price 两列连同下面的相关数据
  • 指定预期结果!

标签: sql sql-server join common-table-expression


【解决方案1】:

当您编辑问题时,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

【讨论】:

  • Msg 156, Level 15, State 1, Line 10 关键字'on'附近的语法错误-
  • @Rehaan 抱歉,错字不应该是他们的请检查我编辑的
  • 感谢您的努力,但正如我所说我不希望联合我希望两列彼此相邻请检查我已编辑的问题
  • @Rehaan row_number 加入很好
  • @Rehaan 并使用完全外连接
【解决方案2】:

您需要修复您的函数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 的内置字符串拆分功能没有返回此类序数的选项。

如果你不能修改函数,还有其他方法可以解决这个问题。但是,由于您已经定义了这样一个函数,您不妨将您真正需要的列包含在内。

【讨论】:

    【解决方案3】:

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

    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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-19
      • 1970-01-01
      • 1970-01-01
      • 2019-02-09
      • 2014-12-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多