在SQL中选择两列之间的关系

时间:2016-11-05 13:00:45

标签: c# sql sql-server database sql-server-2008

Sample

我想在Data3关系值上选择Column2
Column2.Data3Column1.Data2_005的关系 Column1.Data2_005包含Column2.Data2
Column1.Data1_001包含Column2.Data1 如果column1不包含column2,则结束循环
这是我的输出。
enter image description here

2 个答案:

答案 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