Используя нижеприведенный запрос (я новичок в CTE, поэтому это может быть грязно), я хочу создать путь обратной категории всех конечных категорий в моем база данных.SQL Server: CTE (рекурсия), условие установки вне CTE
В настоящий момент у меня есть один идентификатор, определенный внутри самого CTE (268707). Есть ли способ во время моего последнего основного запроса, что, когда я ссылаюсь на CTE, я могу предоставить переменную?
Я поместил комментарий в запрос, где я предполагаю, что это идеальное место для этого, но для жизни меня не может понять, как это сделать.
WITH recursion(stocknode_id, short_desc, parentnode_id, level) AS
(
SELECT
stocknode_id,
short_desc,
parentnode_id,
0 AS level
FROM stock_website_node AS swn
WHERE swn.stocknode_id = 268707
UNION ALL
SELECT
swn.stocknode_id,
swn.short_desc,
swn.parentnode_id,
h.level + 1
FROM stock_website_node AS swn
INNER JOIN recursion AS h ON h.parentnode_id = swn.stocknode_id
)
SELECT
TOP 1 STUFF
(
(
SELECT '/' + swn_stuff.short_desc
FROM stock_website_node AS swn_stuff
WHERE swn_stuff.stocknode_id IN (SELECT stocknode_id FROM recursion) /* <--- I want to pass the variable from here, I think... */
FOR XML PATH(''), TYPE
).value('.','varchar(max)'),
1, 2, ''
) AS category_tree
FROM stock_website_node AS swn_a
Что я бы в идеале хотелось что-то, что будет приносить результаты, если бы я должен был сделать что-то подобное тоже (но не появляется на работе):
WITH recursion(stocknode_id, short_desc, parentnode_id, level) AS
(
SELECT
stocknode_id,
short_desc,
parentnode_id,
0 AS level
FROM stock_website_node AS swn
UNION ALL
SELECT
swn.stocknode_id,
swn.short_desc,
swn.parentnode_id,
h.level + 1
FROM stock_website_node AS swn
INNER JOIN recursion AS h ON h.parentnode_id = swn.stocknode_id
)
SELECT
TOP 1 STUFF
(
(
SELECT '/' + swn_stuff.short_desc
FROM stock_website_node AS swn_stuff
WHERE swn_stuff.stocknode_id IN (SELECT x.stocknode_id FROM recursion AS x WHERE x.xtocknode_id = swn_a.stocknode_id)
FOR XML PATH(''), TYPE
).value('.','varchar(max)'),
1, 2, ''
) AS category_tree
FROM stock_website_node AS swn_a
WHERE swn_a = 268707 OR swn_a = 268708 OR swn_a = 268709
Я создал codepad с SQL для создания переменной таблицы, чтобы вы могли точно видеть, что я делаю, если вы хотите запустить код (http://codepad.org/4AaZEnlq).
В таблице содержатся категории, а parentnode_id относится к background_ode_id родительской категории. Значение parentnode_id из 0 означает, что это категория верхнего уровня. Переменная при условии, в настоящее время в КТР категория нижнего уровня, и запрос в целом строит путь категории, как результат, такие как:
верхнего уровня/второго уровня/третьего уровня/Четвертый уровень
Во время основной query Я хочу предоставить несколько категорий нижнего уровня и возвращать путь категории для каждого из них, но с текущим ограничением только того, что вы можете вручную определить один идентификатор нижнего уровня, а не динамически предоставлять несколько, я немного застрял.
уверен, у вас есть те же параметры, что и с любым другим запросом. – RBarryYoung