Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помогите с запросом  [new]
Elena_HB
Member

Откуда:
Сообщений: 6
Здравствуйте,
Есть следующая задачка: в таблице хранятся данные о менеджерах для юзеров.
Например, у юзера 1 менеджером является юзер 2, а у юзер 2 тоже есть менеджер - юзер 3 и т.д
UserId ManagerID
1 2
2 3
3 4
7 3

Надо получить данные в виде таблицы:

UserId ManagerID
1 2
1 3
1 4
2 3
2 4
3 4
7 3
7 4

Исходные данные:
declare @t table (UserID int, ManagerID int)
insert @t
select 1,2 union all
select 2,3 union all
select 3,4 union all
select 7,3

Подскажите пожалуйста, как это сделать
Спасибо
21 июл 11, 13:18    [11006328]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
declare @t table (UserID int, ManagerID int)
insert @t
select 1,2 union all
select 2,3 union all
select 3,4 union all 
select 7,3;


WITH CTE(U,M) AS
(
 SELECT UserID, ManagerID FROM @t
 UNION ALL
 SELECT CTE.U, T.ManagerID FROM @t T JOIN CTE ON T.UserID=CTE.M
)
SELECT U, M
FROM CTE
ORDER BY U;
21 июл 11, 13:41    [11006508]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Elena_HB
Member

Откуда:
Сообщений: 6
Спасибо огромое, запрос оказался очень простым
21 июл 11, 13:53    [11006610]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Владимир СА
Member

Откуда:
Сообщений: 7915
Конечно iap ты молодец...
Но для меня например непонятно: что отражает результирующий набор?
21 июл 11, 14:00    [11006670]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Владимир СА
Конечно iap ты молодец...
Но для меня например непонятно: что отражает результирующий набор?
Набор как зеркало?

А кто его знает!
Видимо, список всех начальников каждого сотрудника
21 июл 11, 14:03    [11006706]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Elena_HB
Member

Откуда:
Сообщений: 6
В общем ,типа этого
iap , решила разобраться как это работает, с такой конструкцией еще не сталкивалась.
изменив немного запрос получила ошибку, что максимальное количество рекурсий - 100. Боюсь, не вылетит ли все на больших объемах, к сожалению сейчас нет возможности проверить это.
Не могли бы Вы "на пальцах" объяснить как работает такая CTE.
Я считала, что CTE это объект типа View.Получается, что view выбирает из себя же...
21 июл 11, 14:20    [11006855]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Elena_HB, почитайте хотя бы тут.
21 июл 11, 14:38    [11007014]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Elena_HB
В общем ,типа этого
iap , решила разобраться как это работает, с такой конструкцией еще не сталкивалась.
изменив немного запрос получила ошибку, что максимальное количество рекурсий - 100. Боюсь, не вылетит ли все на больших объемах, к сожалению сейчас нет возможности проверить это.
Не могли бы Вы "на пальцах" объяснить как работает такая CTE.
Я считала, что CTE это объект типа View.Получается, что view выбирает из себя же...
Какое-такое количество рекурсий, если я тут ничего рекурсивного не писал!

Да, CTE - это что-то типа представления "на лету" (без сохранения на сервере в виде объекта).
Как и представления они могут быть "обновляемыми" и "необновляемыми". По сходным правилам.
Начиная с SQL2005 это же относится и к производным таблицам (до этого они считались "READ ONLY").
Апдейтить можно также и online табличные функции!
21 июл 11, 14:40    [11007034]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
iap
Elena_HB
В общем ,типа этого
iap , решила разобраться как это работает, с такой конструкцией еще не сталкивалась.
изменив немного запрос получила ошибку, что максимальное количество рекурсий - 100. Боюсь, не вылетит ли все на больших объемах, к сожалению сейчас нет возможности проверить это.
Не могли бы Вы "на пальцах" объяснить как работает такая CTE.
Я считала, что CTE это объект типа View.Получается, что view выбирает из себя же...
Какое-такое количество рекурсий, если я тут ничего рекурсивного не писал!

Да, CTE - это что-то типа представления "на лету" (без сохранения на сервере в виде объекта).
Как и представления они могут быть "обновляемыми" и "необновляемыми". По сходным правилам.
Начиная с SQL2005 это же относится и к производным таблицам (до этого они считались "READ ONLY").
Апдейтить можно также и online табличные функции!
Фу ты! Топик перепутал!
Чего-то сегодня всё про CTE да про CTE!

Elena_HB, забудьте про апдейт CTE, который я тут описал.
Что касается рекурсии, то по-умолчанию уровень ограничен числом 100.
Это обходится приписыванием в самый конец запроса OPTION(MAXRECURSION 0) - это если уверены, что рекурсия не бесконечная.
Или OPTION(MAXRECURSION <Число>), если не хотите уровня вложенности больше, чем Число.
21 июл 11, 14:44    [11007077]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Elena_HB
максимальное количество рекурсий - 100. Боюсь, не вылетит ли все на больших объемах
Покажите мне человека, у которого больше 100 уровней менеджеров!!!
Разве такая глубокая иерархия организации где-нибудь на Земле уже реализована?
21 июл 11, 15:00    [11007233]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
МЛМ (многоуровневый маркетинг), авон - один из ярких представителей
21 июл 11, 15:04    [11007265]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Konst_One
МЛМ (многоуровневый маркетинг), авон - один из ярких представителей
Населения Земли не хватит
21 июл 11, 15:24    [11007445]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Elena_HB
Member

Откуда:
Сообщений: 6
Спасибо, сегодня узнала много нового
21 июл 11, 15:28    [11007477]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
iap
Konst_One
МЛМ (многоуровневый маркетинг), авон - один из ярких представителей
Населения Земли не хватит

Должность1
Должность2
Должность...
ДолжностьNNN

Дерево не обязательно должно быть сбалансированным, оно может вырождаться в список :)
21 июл 11, 15:51    [11007701]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
kDnZP
iap
пропущено...
Населения Земли не хватит

Должность1
Должность2
Должность...
ДолжностьNNN

Дерево не обязательно должно быть сбалансированным, оно может вырождаться в список :)
Значит, в МЛМ один человек будет кормить 100 других?
Не взлетит!
21 июл 11, 16:55    [11008217]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
iap
kDnZP
пропущено...

Должность1
Должность2
Должность...
ДолжностьNNN

Дерево не обязательно должно быть сбалансированным, оно может вырождаться в список :)
Значит, в МЛМ один человек будет кормить 100 других?
Не взлетит!


наоброт, это ж пирамида, типа как в ммм было
21 июл 11, 17:01    [11008263]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить