2012-11-14 3 views
2

키 필드, 다음 키 및 최대 두 개의 이전 키가 포함 된 테이블이 있습니다. 다음 키와 동일한 레코드를 기반으로 정렬 된 결과를 어떻게 만들 수 있습니까? 사전에SQL Server의 다음 레코드 필드를 기준으로 정렬 할 수 있습니까?

KEY,PRKEY1,PRKEY2,FLWKEY 
-------------------------------  
3701401,0000000,0000000,3701403 
3701403,3701401,0000000,3701421 
3701421,3701404,3701403,3701405 
3701405,3701421,0000000,3701423 
3701423,3701405,3701005,3701411 
3701411,3701423,3701413,3701431 
3701431,3701411,3701005,3701455 
3701455,3701431,3701451,3701443 
3701443,3701455,0000000,3701445 
3701445,3701443,0000000,3701432 
3701432,3701445,0000000,3701434 
3701434,3701432,0000000,3701435 
3701435,3701434,0000000,0000000 

감사 :

KEY,PRKEY1,PRKEY2,FLWKEY 
------------------------------- 
3701401,0000000,0000000,3701403 
3701403,3701401,0000000,3701421 
3701402,0000000,0000000,3701404 
3701404,3701402,0000000,3701421 
3701421,3701404,3701403,3701405 
3701405,3701421,0000000,3701423 
3701299,0000000,0000000,3701210 
3701210,3701299,0000000,3702007 
3702007,3701210,0000000,3701005 
3701005,3702007,0000000,3701423 
3701423,3701405,3701005,3701411 
3701413,0000000,0000000,3701411 
3701411,3701423,3701413,3701431 
3701431,3701411,3701005,3701455 
3701451,0000000,0000000,3701455 
3701455,3701431,3701451,3701443 
3701443,3701455,0000000,3701445 
3701445,3701443,0000000,3701432 
3701432,3701445,0000000,3701434 
3701434,3701432,0000000,3701435 
3701435,3701434,0000000,0000000 

결과는 같아야합니다. 나는 약 50k 레코드 만이 방법으로 분류 할 수있다.

+2

sqlfiddle이 우리를보기 [당신이 무엇을 시도했다 (http://www.whathaveyoutried.com). – Kermit

+0

그리고 결과로 원하는 것의 예가 – Lamak

+0

인데, 당신이 요구하는 것이 분명하지 않습니다. 같은 FLWKEY를 공유하는 여러 행이 있으므로 1 : 1 관계가 없으므로 사용자가 묻는 것에 명확한 답이 없습니다. FLWKEY 값으로 정렬하려면 다음과 같이하면됩니다. SELECT a. * FROM table JOIN table b ON a.KEY = b.FLWKEY BY b.FLWKEY; –

답변

3
WITH q (key, prkey1, prkey2, flwkey, init, lvl) AS 
     (
     SELECT *, key, 1 
     FROM mytable 
     WHERE key = 3701401 
     UNION ALL 
     SELECT mt.*, q.init, q.lvl + 1 
     FROM q 
     JOIN mytable mt 
     ON  mt.key = q.flwkey 
     ) 
SELECT key, prkey1, prkey2, flwkey 
FROM q 
ORDER BY 
     init, lvl 

재귀 CTE에서 트래버스해야하는 링크 된 목록입니다. here

+0

감사합니다 !!! 그게 내가 실제로 할 수있는 일이다. – user1824911

관련 문제