是這樣的 我需要一個類似這樣的sql
table 有欄位 id id2
select * from table where id = 0
出來結果若id2 != null
繼續 select * from table where id = id2
直到 select的id2欄位=null 輸出剛剛全部的搜尋結果
id id2
1 |8
8 |10
10 |null
像這樣的結果
初次發問 希望這樣描述夠清楚 謝謝
這樣是你要的輸出方式嗎?
CREATE TABLE #Test (id int, id2 int)
INSERT #Test
SELECT 0, 1 UNION
SELECT 1, 8 UNION
SELECT 8, 10 UNION
SELECT 10, NULL UNION
SELECT 11, 5
;WITH CTE(id, id2) AS
(
-- 第一層
SELECT id, id2
FROM #Test
WHERE id = 0
UNION ALL
-- 遞迴CTE
SELECT t2.id, t2.id2
FROM #Test AS t2
INNER JOIN CTE cte
ON t2.id = cte.id2
)
SELECT *
FROM CTE
DROP TABLE #Test
關於搜尋後繼續搜尋的部分,可以參考這裡
但我不大懂你要搜尋id=0,然後條件給的是id2!=null的意思,或許是我笨,就留著給其他高手解答
CREATE TABLE [dbo].[myTable](
[id] [nvarchar](5) NULL,
[id2] [nvarchar](5) NULL
) ON [PRIMARY]
GO
insert myTable values (1,8)
insert myTable values (8,10)
insert myTable values (10,NULL)
insert myTable values (9,8)
declare @id nvarchar(5)
set @id='1'
while (@id<>'')
begin
select @id=isnull(id2,'') from myTable where id=@id
if (@id<>'')
select @id as result
end
我希望最後輸出會是合併起來像這樣的資料呢?
|id|id2
1|1 |8
2|8 |10
3|10 |null
declare @id nvarchar(5),@oldid nvarchar(5),@cnt int
set @oldid='1'
set @cnt=1
while (@oldid<>'')
begin
select @id=isnull(id2,'') from myTable where id=@oldid
select convert(varchar,@cnt)+'|'+@oldid+'|'+(case when @id='' then 'NULL' else @id end) as result
set @oldid=@id
set @cnt=@cnt+1
end