查询以读取一列并动态使用另一列中的相应数据

时间:2019-06-13 01:18:00

标签: sql sql-server join

我有一张桌子,如下:

enter image description here

我将此表(假设为位置)与C列上的另一个表(假设为名称)连接起来。

我希望能够在查询 Country / State / Lane / Address / Suburb 中打印列A值的串联。

流程应如下所示。可以说有一个列值匹配E(与 Names )表。然后查询在B列中查找对应的值,在这种情况下为“ D”。现在,它在ColumnC中搜索值“ D”,并在ColumnB中获取相应的值“ C”。一直持续到B列中的值为空。到了这一点,将所有检索到的行的Column A值连接起来,并将其显示为 Country / State / Lane / Address / Suburb

我知道这可能需要动态查询,但是我不确定如何联接两个表并仅对1个动态查询使用。

1 个答案:

答案 0 :(得分:0)

这可以通过递归CTE完成:

首先在临时表中设置数据:

declare @t table(A varchar(100), B varchar(10), C varchar(10))
insert @t values ('Address','C','D'),('Lane','B','C'),('Suburb','D','E'),('State','A','B'),('Country',null,'A')

声明起点

declare @start varchar(10); set @start='E'

运行递归查询

;with cte as(
    select A, B from @t where C=@start
    union all
    select convert(varchar(100),T.A+'/'+cte.A), T.B 
    from cte
    join @t T on T.C=cte.B
)
select * from cte where B is null