SQL查询A->;B->;A->;B->;A.

SQL查询A->;B->;A->;B->;A.,sql,sql-server,Sql,Sql Server,我有两列,希望像A->B->A->B->A……一样进行查询,直到结束。在一个位置上,A没有作为末端的B。请指导如何查询以获得结果 A B ---------------------------------------------------------------------- {07906439-7636-462D-95AE-B0D7683814A8} {69DA38DB-BA4F-4F34-9DCB-4F1DF7C

我有两列,希望像A->B->A->B->A……一样进行查询,直到结束。在一个位置上,A没有作为末端的B。请指导如何查询以获得结果

A                                       B
----------------------------------------------------------------------
{07906439-7636-462D-95AE-B0D7683814A8}  {69DA38DB-BA4F-4F34-9DCB-4F1DF7C353FD}
{69DA38DB-BA4F-4F34-9DCB-4F1DF7C353FD}  {0460261B-833E-4FCD-981B-26A7846B593D}
{0460261B-833E-4FCD-981B-26A7846B593D}  {713607FA-32ED-4AFD-83AF-5CA346A1A019}
{713607FA-32ED-4AFD-83AF-5CA346A1A019}  

在下面的查询中,您分配0、2、4。。。到A列和1、3、5。。。对于B列,您只需将所有列与这些列进行
合并并按它们排序,这样您就可以实现交替记录。请注意,我使用了orderby(selectnull)
,这是表的物理顺序,您可能需要引入一些列来保证结果是不变的

select * from (
select [A],row_number() over (order by (select null))*2-2 [rn] from MY_TABLE
union all
select [B],row_number() over (order by (select null))*2-1 [rn] from MY_TABLE
) [a] order by [rn]

在下面的查询中,您分配0、2、4。。。到A列和1、3、5。。。对于B列,您只需将所有列与这些列进行
合并并按它们排序,这样您就可以实现交替记录。请注意,我使用了orderby(selectnull)
,这是表的物理顺序,您可能需要引入一些列来保证结果是不变的

select * from (
select [A],row_number() over (order by (select null))*2-2 [rn] from MY_TABLE
union all
select [B],row_number() over (order by (select null))*2-1 [rn] from MY_TABLE
) [a] order by [rn]

试试递归CTE的。。。类似于下面的内容

with temp as (
  select A, B, 0 as Level
  from Table1
  where B is null

  union all

  select t.A, t.B, x.Level + 1
  from Table1 t
  inner join temp x
    on t.B = x.A
)
select *
from temp;

试试递归CTE的。。。类似于下面的内容

with temp as (
  select A, B, 0 as Level
  from Table1
  where B is null

  union all

  select t.A, t.B, x.Level + 1
  from Table1 t
  inner join temp x
    on t.B = x.A
)
select *
from temp;

你的问题不是真的可以回答的,除非有一个专栏可以用来按你想要的方式排序。那么…有这样一列吗?在SQL Server中查找递归CTE或层次关系。@TimBiegeleisen除非有循环(OP的示例数据中不存在),否则有顺序。我们可以使用二元关系的传递闭包“给定行
x
y
x.A=y.B
”你想要什么数据作为查询的输出?@Caleth看看Michael下面的答案,如果有排序栏的话,我会发布什么。不过,这是一个没有意义的查询,没有用于排序的列,因为这样就无法保证顺序。除非存在一个可以按您希望的方式排序的列,否则您的问题实际上无法回答。那么…有这样一列吗?在SQL Server中查找递归CTE或层次关系。@TimBiegeleisen除非有循环(OP的示例数据中不存在),否则有顺序。我们可以使用二元关系的传递闭包“给定行
x
y
x.A=y.B
”你想要什么数据作为查询的输出?@Caleth看看Michael下面的答案,如果有排序栏的话,我会发布什么。不过,这是一个没有意义的查询,没有用于排序的列,因为这样就无法保证顺序。