数据库Shop_Categories的数据如下:
ProdCateID ProdCateName ParentCateID
1 服装 0
2 箱包 0
3 内衣 1
4 外套 1
5 男箱包 2
6 女箱包 2
7 三角裤 3
8 奶罩 3
9 男外套 4
10 女大衣 4
11 男用钱包 5
12 女用钱包 6
要求搜索出的结果按 大类—小类—小小类排列,即:
服装
内衣
三角裤
奶罩
外套
男外套
女大衣
箱包
男箱包
男用钱包
女箱包
女用钱包
,如何写搜索语句?
--只有三级分类?
--示例数据
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
--查询
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
GO
--删除测试
DROP TABLE tb
/*--结果
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
--*/