powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Рекурсивный запрос
17 сообщений из 17, страница 1 из 1
Рекурсивный запрос
    #39738531
KOHHEKTOP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток.
Имеется подобная таблица:

IdParentName10Администрация20Филиал 130Филиал 242Бухгалтерия53Делопроизводители64Группа тех. работ74Группа по работе с персоналом85Группа раз95Группа два

Хочу создать представление вида:

IdParentName10Администрация20Филиал 130Филиал 242Филиал 153Филиал 264Филиал 174Филиал 185Филиал 295Филиал 2

Т.е. чтобы либо сразу в Name родитель был, либо может новый столбец создать лучше... Пробовал этим способом, но это не то что мне надо. Не знаю как описать в поиске
...
Рейтинг: 0 / 0
Рекурсивный запрос
    #39738571
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
WITH Data AS
(
 SELECT * FROM(VALUES
  (1,0,'Администрация')
 ,(2,0,'Филиал 1')
 ,(3,0,'Филиал 2')
 ,(4,2,'Бухгалтерия')
 ,(5,3,'Делопроизводители')
 ,(6,4,'Группа тех. работ')
 ,(7,4,'Группа по работе с персоналом')
 ,(8,5,'Группа раз')
 ,(9,5,'Группа два')
 ,(10,9,'Группа три'))T(Id,Parent,Name)
)
,
CTE(Id,Parent,Name) AS
(
 SELECT Id,Parent,Name FROM Data WHERE Parent=0
 UNION ALL
 SELECT Data.Id,Data.Parent,CTE.Name
 FROM CTE JOIN Data ON CTE.Id=Data.Parent
)
SELECT *
FROM CTE
ORDER BY Id;
...
Рейтинг: 0 / 0
Рекурсивный запрос
    #39738594
KOHHEKTOP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Забыл ссылку добавить какой способ применял.

p.s. А если строк более 1000 ?
...
Рейтинг: 0 / 0
Рекурсивный запрос
    #39738599
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KOHHEKTOPЗабыл ссылку добавить какой способ применял.

p.s. А если строк более 1000 ?После ORDER BY (но до точки с запятой!)
добавьте OPTION(MAXRECURSION 0)
...
Рейтинг: 0 / 0
Рекурсивный запрос
    #39738605
KOHHEKTOP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iap,

Спасибо. У меня этой таблицей является Departments. Такой код не хочет работать:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
with Data as
(
select * from Departments T (Id. Parent, Name)
)
,
CTE (Id, Parent, Name) AS
(
select Id, Parent, Name from Data where parent=0
union all
select Data.Id, Data.Parent, CTE.Name
from CTE Join data on CTE.Id=Data.Parent
)
select * from CTE order by OPTION(MAXRECURSION 0) id;
...
Рейтинг: 0 / 0
Рекурсивный запрос
    #39738606
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KOHHEKTOP,

мдя

Код: sql
1.
 order by  id OPTION(MAXRECURSION 0);
...
Рейтинг: 0 / 0
Рекурсивный запрос
    #39738610
KOHHEKTOP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TaPaK,

Даже так не хочет.
Неправильный синтаксис около ключевого слова "OPTION"
и ещё
Id является не известным параметром табличных подсказок
...
Рейтинг: 0 / 0
Рекурсивный запрос
    #39738611
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KOHHEKTOPTaPaK,

Даже так не хочет.
Неправильный синтаксис около ключевого слова "OPTION"
и ещё
Id является не известным параметром табличных подсказок
а это как так?
Код: sql
1.
select * from Departments T (Id. Parent, Name)
...
Рейтинг: 0 / 0
Рекурсивный запрос
    #39738615
KOHHEKTOP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TaPaK,

меня это смутило немного. Если убрать букву Т или то, что сзади него (вместе с ней), то вторая ошибка пропадает.
...
Рейтинг: 0 / 0
Рекурсивный запрос
    #39738617
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KOHHEKTOPTaPaK,

меня это смутило немного. Если убрать букву Т или то, что сзади него (вместе с ней), то вторая ошибка пропадает.
Time to RTFM!
...
Рейтинг: 0 / 0
Рекурсивный запрос
    #39738618
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KOHHEKTOPTaPaK,

Даже так не хочет.
Неправильный синтаксис около ключевого слова "OPTION"
и ещё
Id является не известным параметром табличных подсказок Скопипастите сюда запрос, на который сервер так ругается.
Id случайно не в скобках остался? Впрочем, это уже гадание.
И напишите здесь результат запроса
Код: sql
1.
PRINT @@VERSION;


P.S. Хочется спросить: а вы про ORDER BY раньше ничего не слышали?
...
Рейтинг: 0 / 0
Рекурсивный запрос
    #39738619
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KOHHEKTOPTaPaK,

меня это смутило немного. Если убрать букву Т или то, что сзади него (вместе с ней), то вторая ошибка пропадает.Первое CTE у меня - это всего лишь имитация заполненной таблицы.
Чтобы писать для конкретных данных, похожих на ваши.
Вместо этого CTE надо просто применять имя своей настоящей таблицы.
...
Рейтинг: 0 / 0
Рекурсивный запрос
    #39738623
KOHHEKTOP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iap,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
with Data as
(
select * from Departments 
)
,
CTE (Id, Parent, Name) AS
(
select Id, Parent, Name from Data where parent=0
union all
select Data.Id, Data.Parent, CTE.Name
from CTE Join data on CTE.Id=Data.Parent
)
select * from CTE order by OPTION(MAXRECURSION 0);



print @@version
Microsoft SQL Server 2008 R2 (SP3-GDR) (KB4057113) - 10.50.6560.0 (X64)
Dec 28 2017 15:03:48
Copyright (c) Microsoft Corporation
Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)

-----------------------
Про order by знаю что это сортировка по столбцу по убыванию/возрастанию.
Если вставляю вместо CTE свою таблицу (Departments), то ошибка всё равно остаётся
...
Рейтинг: 0 / 0
Рекурсивный запрос
    #39738624
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KOHHEKTOP,

Код: sql
1.
select * from CTE order by OPTION(MAXRECURSION 0);


ALT + F4
...
Рейтинг: 0 / 0
Рекурсивный запрос
    #39738626
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
order by  ???



по какому столбцу сортируете, вам уже 2 раза на справку намекают
...
Рейтинг: 0 / 0
Рекурсивный запрос
    #39738627
KOHHEKTOP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мда... действительно ALT + F4
Простите, пожалуйста, за мою тупость.
И Спасибо большое за помощь.

Пойду свой стыд и срам умывать...
...
Рейтинг: 0 / 0
Рекурсивный запрос
    #39738629
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KOHHEKTOP,

в догонку

...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Рекурсивный запрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]