SQL查询A->;B->;A->;B->;A.
我有两列,希望像A->B->A->B->A……一样进行查询,直到结束。在一个位置上,A没有作为末端的B。请指导如何查询以获得结果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
----------------------------------------------------------------------
{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下面的答案,如果有排序栏的话,我会发布什么。不过,这是一个没有意义的查询,没有用于排序的列,因为这样就无法保证顺序。