【发布时间】:2012-01-26 11:12:36
【问题描述】:
最后我的 select 语句有问题。我想要做的是选择两个级别,但我没有得到这个声明的结果。请注意,如果@Level 为 1,我不想小于 1,否则可能会弄乱结果,因此也可能存在条件
@Level = @Level -1 我遇到问题的部分
FROM c WHERE c.Level = @Level AND c.Level = @Level - 1 ORDER BY Level ASC
或者这个
FROM c WHERE c.Level BETWEEN @Level AND c.Level - 1 ORDER BY Level ASC
SQL
DECLARE @Department TABLE
(
Id INT NOT NULL,
Name varchar(50) NOT NULL,
ParentId int NULL
)
INSERT INTO @Department SELECT 1, 'Toys', null
INSERT INTO @Department SELECT 2, 'Computers', null,
INSERT INTO @Department SELECT 3, 'Consoles', 2
INSERT INTO @Department SELECT 4, 'PlayStation 3', 3
INSERT INTO @Department SELECT 5, 'Xbox 360', 2
INSERT INTO @Department SELECT 6, 'Games', 1
INSERT INTO @Department SELECT 7, 'Puzzles', 6
INSERT INTO @Department SELECT 8, 'Mens Wear', null
INSERT INTO @Department SELECT 9, 'Mens Clothing', 8
INSERT INTO @Department SELECT 10, 'Jackets', 9
INSERT INTO @Department SELECT 11, 'Shoes', 9
INSERT INTO @Department SELECT 12, 'Rain Coats', 10
DECLARE @Level int = 4
;WITH c AS
(
SELECT Id, ParentId, Name, 1 AS Level
FROM @Department
WHERE ParentId IS NULL
UNION ALL
SELECT t.Id, t.ParentId, T.Name, c.Level + 1 AS Level
FROM @Department T
INNER JOIN c on t.ParentId = c.Id
)
SELECT Id, ParentId, Name, Level
FROM c WHERE c.Level = @Level AND c.Level = @Level - 1 ORDER BY Level ASC
FROM c WHERE c.Level BETWEEN @Level AND @Level - 1 ORDER BY Level ASC
【问题讨论】:
-
如果你只上一层,你可以把这个表连接到它自己,并将你的条件放在 on 子句中。
标签: sql sql-server sql-server-2008