三級分類資料的排序
--樣本資料:
CREATE TABLE tb(ProdCateID int,ProdCateName nvarchar(10),ParentCateID int)
INSERT tb SELECT 1, N'服裝' ,0
UNION ALL SELECT 2, N'箱包' ,0
UNION ALL SELECT 3, N'內衣' ,1
UNION ALL SELECT 4, N'外套' ,1
UNION ALL SELECT 5, N'男箱包' ,2
UNION ALL SELECT 6, N'女箱包' ,2
UNION ALL SELECT 7, N'內褲' ,3
UNION ALL SELECT 8, N'文胸' ,3
UNION ALL SELECT 9, N'男外套' ,4
UNION ALL SELECT 10,N'女大衣' ,4
UNION ALL SELECT 11,N'男用錢包',5
UNION ALL SELECT 12,N'女用錢包',6
GO
問題描述:
ProdCateID是編碼,ParentCateID是父級編碼,只有三級資料,要求按層級深度排序,先排列一個ProdCateID的所有子項,再排列第二個。對於樣本資料,要求結果如下:
ProdCateID ProdCateName ParentCateID
----------- ------------ ------------
1 服裝 0
3 內衣 1
7 內褲 3
8 文胸 3
4 外套 1
9 男外套 4
10 女大衣 4
2 箱包 0
5 男箱包 2
11 男用錢包 5
6 女箱包 2
12 女用錢包 6
(所影響的行數為 12 行)
--查詢處理的代碼
SELECT a.*
FROM tb a
LEFT JOIN tb b ON a.ParentCateID=b.ProdCateID
ORDER BY CASE
WHEN b.ParentCateID IS NULL THEN a.ProdCateID
WHEN b.ParentCateID=0 THEN b.ProdCateID
ELSE b.ParentCateID END,
CASE
WHEN b.ParentCateID=0 THEN a.ProdCateID
ELSE a.ParentCateID END,
a.ProdCateID
原帖地址