首页 文章

在表值函数上使用 select 语句返回相等的行数,没有重复项的笛卡尔积

提问于
浏览
0

我不确定标题是否正确描述了我的问题,但问题就在这里。

我有一个表值函数,采用逗号分隔值。
我有两个字符串,它们的逗号分隔条目数相同。

以下查询返回给我笛卡尔积

select * from dbo.SplitString('test,test1',',') as a,dbo.SplitString('45,78',',') as b
+-------+-------+  
| items | items |  
+-------+-------+  
| test  |  45   |  
| test  |  78   |  
| test1 |  45   |  
| test1 |  78   |  
+-------+-------+

我需要一行中具有相应值的输出,没有重复

+-------+-------+  
| items | items |  
+-------+-------+  
| test  |  45   |  
| test1 |  78   |  
+-------+-------+

关于如何使用 select 语句以及仅函数获取上述输出的任何想法

2 回答

  • 1

    除非SplitString返回可以从中派生订单的东西(例如,它可能返回作为项目索引的列),否则这是不可能的。

    SQL Server 是 set-based,并且集没有顺序。仅通过对特定列的排序来明确指定顺序。

    Index int not null列添加到SplitString并将索引上的结果连接在一起。为此,请使用 Jayvee 的答案中的查询(但按Index排序,而不是colx排序)。我将复制查询:

    --adapted from Jayvee's answer:
    select a.colx, b.colx from 
    (select colx, row_number() over(order by a.Index) rown from dbo.SplitString('test,test1',',')) a
    join a
    (select colx, row_number() over(order by b.Index) rown from dbo.SplitString('45,78',',')) b
    on a.rown=b.rown
    
  • 1

    假设有关您的数据和功能的几件事应该可以正常工作:

    select a.colx, b.colx from 
    (select colx, row_number() over(order by colx) rown from dbo.SplitString('test,test1',',')) a
    join a
    (select colx, row_number() over(order by colx) rown from dbo.SplitString('45,78',',')) b
    on a.rown=b.rown
    

相关问题