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

Откуда:
Сообщений: 5
Добрый день!
Есть таблица Список разделов:

ID	ParentID	ClassID	       Name                 	             Level
62808 62803 13799 Лабораторные приборы и оборудование 1
67822 62803 13799 Непривязанные товары 1
67754 62803 13799 Нормативная документация 1
71783 62803 13799 Приборы экологического контроля и охраны труда 1
149664 62803 13799 Реактивы Panreac 1
71784 62803 13799 Специализированное (отраслевое) оборудование 1
133457 62803 13799 Техническая информация 1
62809 62803 13799 Технологические приборы и оборудование 1
67756 62803 13799 Услуги 1
62813 62803 13799 Химия 1
62826 62808 13799 Дистилляторы, установки для очистки воды 2
69993 62808 13799 Дозаторы 2
143640 62808 13799 ИК анлизаторы 2
62828 62808 13799 Индикаторные трубки 2
132080 62808 13799 Климатические, температурные системы 2
.............................................................................................................
ID - уникальный номер раздела
ParentID - номер родителя
ClassID -классификационный номер
Name - Имя раздела
Level уровень вложенности.(мах=6)

Нужно составить таблицу чтобы вней были
  имя раздела | его родитель 

Помогите написать запрос.
5 дек 12, 12:24    [13580261]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросами к таблице  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
поиск по форуму вам усе расскажет ..обсуждалось 10к раз
5 дек 12, 12:27    [13580302]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросами к таблице  [new]
LabC
Member

Откуда:
Сообщений: 5
к сожалению в SQL не силен. По поиску искал но так и не понял как написать запрос.
Прошу не пинать. Ткните носом плиз.))
логически понимаю что нужно сделать а вот написать правильно запрос не получается
5 дек 12, 12:37    [13580394]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросами к таблице  [new]
Glory
Member

Откуда:
Сообщений: 104751
LabC
Нужно составить таблицу чтобы вней были
  имя раздела | его родитель 

Ближайший родитель или все ?
5 дек 12, 12:38    [13580404]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросами к таблице  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
with cte as (
   select
     id, parentID, ClassID, Name, 0 as Level
   from table
   where level =1
   union all
   select
     t.id, t.parentID, t.ClassID, t.Name,  Level +1
   from table t
    inner join cte c on t.ParebtID= c.id 
  where t.Level > 1
)
select * from cte
5 дек 12, 12:44    [13580469]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросами к таблице  [new]
LabC
Member

Откуда:
Сообщений: 5
Glory
Ближайший родитель или все ?


Ближайший

Maxx Спасибо
5 дек 12, 13:08    [13580731]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросами к таблице  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
LabC,

все таки таких примеров масса по форуму
5 дек 12, 13:10    [13580746]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросами к таблице  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
LabC
Glory
Ближайший родитель или все ?


Ближайший

Maxx Спасибо
Если ближайший, то проще LEFT JOIN таблицы самой с собой (c разными алиасами)
5 дек 12, 13:13    [13580793]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросами к таблице  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
iap
Если ближайший, то проще LEFT JOIN таблицы самой с собой (c разными алиасами)

+100
5 дек 12, 13:16    [13580844]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросами к таблице  [new]
LabC
Member

Откуда:
Сообщений: 5
use [tovar]  ;
go
with cte (id, ParentID, Name, level )  as (
   select
     ID, parentID,  Name,  0 as Level
   from [dbo].['Структура папок'] 
   where level =0
   union all
   select
     t.ID, t.parentID,  t.Name, t.level +1
   from [dbo].['Структура папок'] t
     inner join cte c on  t.ParentID= c.ID
  where t.level >0
   )
select * from cte ORDER BY level

Выдает такой результат
[IMG]http://s001.radikal.ru/i193/1212/6f/effdae93ddeft.jpg[/IMG]

нужно добавить в новую таблицу "каталог" со столбцами ID, ParentID, name, rName(имя родителя)
На скрине видно что для каждого level 2 родителем является level 0 т.е каталог товаров. та вот в rName нужно добавить Имя с level 0 и так делее. Получается каждому ParentID с level=2 нужно в rName добавить Name раздела Level=0 при этом ID должен быть равен ParentID Level+1..

Блин сам запутался ..Надеюсь понятно объяснил. Спасибо за ранее.
6 дек 12, 09:49    [13585676]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросами к таблице  [new]
LabC
Member

Откуда:
Сообщений: 5
Картинка с другого сайта.
6 дек 12, 09:54    [13585694]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить