This is SQL Server syntax:
DECLARE @category TABLE(category_id INT,parent_category_id INT,caption varchar(100));
INSERT INTO @category VALUES
(1,NULL,'Top1')
,(2,1,'Sub11')
,(3,1,'Sub12')
,(4,2,'Sub111')
,(5,2,'Sub112')
,(6,NULL,'Top2')
,(7,6,'Sub21')
,(8,6,'Sub22')
,(9,8,'Sub221');
WITH rCTE AS
(
SELECT c.category_id
,c.parent_category_id
,c.caption
,CAST(ROW_NUMBER() OVER(ORDER BY c.category_id) AS VARCHAR(MAX)) + '.' AS [Level]
,REPLACE(STR(ROW_NUMBER() OVER(ORDER BY c.category_id),4),' ','0') + '.' AS [Sortable]
FROM @category AS c WHERE parent_category_id IS NULL
UNION ALL
SELECT c.category_id
,c.parent_category_id
,c.caption
,rCTE.[Level] + CAST(ROW_NUMBER() OVER(ORDER BY c.category_id) AS VARCHAR(MAX)) + '.'
,rCTE.Sortable + REPLACE(STR(ROW_NUMBER() OVER(ORDER BY c.category_id),4),' ','0') + '.'
FROM rCTE
INNER JOIN @category AS c ON c.parent_category_id=rCTE.category_id
)
SELECT *
FROM rCTE
ORDER BY Sortable
The result
+-------------+--------------------+---------+--------+-----------------+
| category_id | parent_category_id | caption | Level | Sortable |
+-------------+--------------------+---------+--------+-----------------+
| 1 | NULL | Top1 | 1. | 0001. |
+-------------+--------------------+---------+--------+-----------------+
| 2 | 1 | Sub11 | 1.1. | 0001.0001. |
+-------------+--------------------+---------+--------+-----------------+
| 4 | 2 | Sub111 | 1.1.1. | 0001.0001.0001. |
+-------------+--------------------+---------+--------+-----------------+
| 5 | 2 | Sub112 | 1.1.2. | 0001.0001.0002. |
+-------------+--------------------+---------+--------+-----------------+
| 3 | 1 | Sub12 | 1.2. | 0001.0002. |
+-------------+--------------------+---------+--------+-----------------+
| 6 | NULL | Top2 | 2. | 0002. |
+-------------+--------------------+---------+--------+-----------------+
| 7 | 6 | Sub21 | 2.1. | 0002.0001. |
+-------------+--------------------+---------+--------+-----------------+
| 8 | 6 | Sub22 | 2.2. | 0002.0002. |
+-------------+--------------------+---------+--------+-----------------+
| 9 | 8 | Sub221 | 2.2.1. | 0002.0002.0001. |
+-------------+--------------------+---------+--------+-----------------+