我想在Data3
关系值上选择Column2
。
Column2.Data3
与Column1.Data2_005
的关系
Column1.Data2_005
包含Column2.Data2
。
Column1.Data1_001
包含Column2.Data1
如果column1
不包含column2
,则结束循环
这是我的输出。
答案 0 :(得分:0)
您似乎希望在表中递归查看前一个Column2
值中包含的Column1
值。您可以使用公用表表达式执行此操作;
WITH cte(Column1, Column2) AS (
SELECT Column1, Column2 FROM test t WHERE Column2='Data3'
UNION ALL
SELECT t.Column1, t.Column2 FROM test t
JOIN cte
ON CHARINDEX(t.column2, cte.Column1) > 0
)
SELECT * FROM cte;
>>>
Column1 Column2
Data2_005 Data3
Data1_001 Data2
GML1 Data1
第一个选择查找基本案例(Column2
等于Data3
的行)。
第二个选择与cte
本身连接,在这种情况下包含前一行,因此您可以与之前的Column1
值匹配以查找下一行。
小心循环(例如,Data3_001
+ Data3
的行会使查询失败)
答案 1 :(得分:0)
其他风味:
create table #temp (column1 nvarchar(20), column2 nvarchar(20))
insert into #temp values
('GML1', 'Data1'),
('Data1_001', 'Data2'),
('Data2_005', 'Data3'),
('GML2', 'Data10'),
('Data10_001', 'Data11'),
('Data10_005', 'Data12')
;with cte
as
(
select column1, column2 from #temp where column2='Data3'
union all
select a.column1, a.column2 from #temp a join cte b on a.column2 = SUBSTRING(b.column1, 0, Len(b.column2)+1)
)
select * from cte order by column2