Hi! Could we please enable some services and cookies to improve your experience and our website?

SQLize | PHPize | SQLtest

Online Sandbox for SQL and PHP: Write, Run, Test, and Share SQL Queries and PHP Code

A A A
Login    Share code      Blog   FAQ
Copy Format Clear
CREATE TABLE test (SeqNo INT, StartStep CHAR(1), EndStep CHAR(1)); INSERT INTO test VALUES (788, 'A', 'B'), (788, 'A', 'C'), (795, 'B', 'C'), (797, 'C', 'D'), (798, 'D', 'F'), (798, 'D', 'G'); SELECT * FROM test; WITH cte1 AS ( SELECT *, DENSE_RANK() OVER (ORDER BY SeqNo) dr, ROW_NUMBER() OVER (ORDER BY SeqNo) rn FROM test ), cte2 AS ( SELECT SeqNo, StartStep, EndStep, CAST(',' + StartStep + ',' + EndStep + ',' AS NVARCHAR) path, rn, 1 sn FROM cte1 WHERE dr = 1 UNION ALL SELECT cte1.SeqNo, cte1.StartStep, cte1.EndStep, CAST(cte2.path + cte1.EndStep + ',' AS NVARCHAR), cte2.rn, cte2.sn + 1 FROM cte2 JOIN cte1 ON cte2.EndStep = cte1.StartStep ), cte3 AS ( SELECT rn, MAX(sn) sn FROM cte2 GROUP BY rn ) SELECT test.SeqNo, test.StartStep, test.EndStep FROM cte2 JOIN cte3 ON cte2.rn = cte3.rn AND cte2.sn = cte3.sn JOIN test ON CHARINDEX(',' + test.StartStep + ',' + test.EndStep + ',', cte2.path) > 0 ORDER BY cte2.path, test.SeqNo ;

Stuck with a problem? Got Error? Ask AI support!

Copy Clear