1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| WITH SR as ( SELECT [idT] AS _id, [titleT] AS _title, [codeT] AS _str FROM [LIST_CODE_TH]) ,
SR1 AS ( SELECT _id,_title,_str, CAST('<c>' + REPLACE(_str, '.','</c><c>') + '</c>' AS XML) AS texte_xml FROM SR),
SR2 AS (
SELECT _id,_title,_str, T.C.value('(./text())[1]','NVARCHAR(25)') AS PartStr ,
ROW_NUMBER() OVER(PARTITION BY _id ORDER BY CASE WHEN _id=0 THEN 1 END) AS Rnk FROM SR1 CROSS APPLY texte_xml.nodes('//c') AS T(C)
)
SELECT _id, _title, [1] as Part1,[2] as Part2,[3] as Part3,[4] as Part4,[5] as Part5,[6] as Part6,[7] as Part7,[8] as Part8,[9] as Part9,[10] as Part10
,_str as TH_CURRENT_PATH
,SUBSTRING(_str, 1,
CASE
WHEN (LEN(_str) - (LEN(ISNULL([10],ISNULL([9],ISNULL([8],ISNULL([7],ISNULL([6],ISNULL([5],ISNULL([4],ISNULL([3],ISNULL([2],ISNULL([1], 0))))))))))) +1)) > 0 THEN (LEN(_str) - (LEN(ISNULL([10],ISNULL([9],ISNULL([8],ISNULL([7],ISNULL([6],ISNULL([5],ISNULL([4],ISNULL([3],ISNULL([2],ISNULL([1], 0))))))))))) +1))
ELSE LEN(_str)
END
) AS TH_PARENT_PATH
,CASE
WHEN (([10]<>'') AND ([10] IS NOT NULL))THEN [10]
WHEN (([9]<>'') AND (([10]='') OR ([10] IS NULL)) )THEN [9]
WHEN (([8]<>'') AND (([9]='') OR ([9] IS NULL)) )THEN [8]
WHEN (([7]<>'') AND (([8]='') OR ([8] IS NULL)) )THEN [7]
WHEN (([6]<>'') AND (([7]='') OR ([7] IS NULL)) )THEN [6]
WHEN (([5]<>'') AND (([6]='') OR ([6] IS NULL)) )THEN [5]
WHEN (([4]<>'') AND (([5]='') OR ([5] IS NULL)) )THEN [4]
WHEN (([3]<>'') AND (([4]='') OR ([4] IS NULL)) )THEN [3]
WHEN (([2]<>'') AND (([3]='') OR ([3] IS NULL)) )THEN [2]
WHEN (([1]<>'') AND (([2]='') OR ([2] IS NULL)) )THEN [1]
ELSE CAST(0 AS varchar(3))
END AS TH_CURRENT_ID
,CASE
WHEN (([10]<>'') AND ([10] IS NOT NULL))THEN [9]
WHEN (([9]<>'') AND ([9] IS NOT NULL))THEN [8]
WHEN (([8]<>'') AND ([8] IS NOT NULL))THEN [7]
WHEN (([7]<>'') AND ([7] IS NOT NULL))THEN [6]
WHEN (([6]<>'') AND ([6] IS NOT NULL))THEN [5]
WHEN (([5]<>'') AND ([5] IS NOT NULL))THEN [4]
WHEN (([4]<>'') AND ([4] IS NOT NULL))THEN [3]
WHEN (([3]<>'') AND ([3] IS NOT NULL))THEN [2]
WHEN (([2]<>'') AND ([2] IS NOT NULL))THEN [1]
WHEN (([1]<>'') AND ([1] IS NOT NULL))THEN [1]
ELSE CAST(0 AS varchar(3))
END AS TH_PARENT_ID
,CASE
WHEN [1]<>'' THEN CAST([1] AS varchar(3))
ELSE CAST(0 AS varchar(3))
END as TH_MASTER_ID
,CASE
WHEN [2]<>'' THEN CAST([2] AS varchar(3))
ELSE CAST(0 AS varchar(3))
END as TH_MASTER_CHILD_ID
FROM SR2 PIVOT (MAX(PartStr) FOR Rnk IN ( [1],[2],[3],[4],[5],[6],[7],[8],[9],[10] ) ) AS PT |