Вход | Регистрация

Форумы на Кубань.Ру


1С:Предприятие ::

Метки:Запросы и построители

Прямой запрос к таблице на SQL

Ø
Я
   maxanp
25.11.04 - 09:29
Справочник товаров хранится в таблице sc3 на sql сервере. Каким запросом можно получить самый верхний уровень справочника, которому принадлежит товар? И второй? Короче говоря надо получить таблицу, состоящую из трех столбцов? Сам товар - Уровень1 - Уровень2. Запросы составляются не из 1С.
 
 
   Дяпти
1 - 25.11.04 - 09:34
Циклом надо. одним селектом не получится. заведи себе функцию на SQL сервере.
   Sure2
2 - 25.11.04 - 10:05
select fld1.DESCR, fld2.DESCR, el.* from SC3 el, SC3 fld1, SC3 fld2
where el.PARENTID=fld2.Id and fld2.PARENTID=fld1.ID
Но это запрос на очень упрощённый случай: если вдруг у тебя товары содержатся не только на уровне 3, но и на уровне 2 и 1, то нужно делать left join и сопутствующие манипуляции
   Дяпти
3 - 25.11.04 - 10:34
(2) А если элементы есть и на 4-м и на 5-м и так далее уровне? Твой запрос не определяет верхнего родителя, он определяет родителя на 2 уровня старше.
   FAM
5 - 25.11.04 - 10:44
Select
  Спр_1.ID Элемент,
  Спр_1.Code Код,
  Спр_1.Descr Наименование,
  Спр_2.id Гр1,
  Спр_2.Descr НГр1,
  Спр_3.id Гр2,
  Спр_3.Descr НГр2,
  Спр_4.id Гр3,
  Спр_4.Descr НГр3,
  Спр_5.id Гр4,
  Спр_5.Descr НГр4,
  Спр_6.id Гр5,
  Спр_6.Descr НГр5,
  Coalesce(Спр_6.IsFolder*6, Спр_5.IsFolder*5, Спр_4.IsFolder*4, Спр_3.IsFolder*3, Спр_2.IsFolder*2, 1) Уровень
From
  sc4089 Спр_1 With (NoLock)
  Left join sc4089 Спр_2 With (NoLock) On Спр_2.ID = Спр_1.ParentID
  Left join sc4089 Спр_3 With (NoLock) On Спр_3.ID = Спр_2.ParentID
  Left join sc4089 Спр_4 With (NoLock) On Спр_4.ID = Спр_3.ParentID
  Left join sc4089 Спр_5 With (NoLock) On Спр_5.ID = Спр_4.ParentID
  Left join sc4089 Спр_6 With (NoLock) On Спр_6.ID = Спр_5.ParentID
Where
  Спр_1.IsFolder = 2
   Дяпти
6 - 25.11.04 - 10:45
Можно вот так сделать:
create function dbo.uf_SC3_MainParent(@id char(9))
returns char(9) as
begin
 declare @parentid char(9)
 declare @rslt char(9)
 select @parentid = PARENTID from SC3 where ID = @id
 if @parentid = '     0   '
  set @rslt = @id
 else
  set @rslt = dbo.uf_SC3_MainParent(@parentid)
 return @rslt
end
   Sure2
7 - 25.11.04 - 10:49
(3) Именно так. Был предложен "скелет" запроса, но не запрос. Но "скелет" показывает, что можно обойтись одним Select'ом :-Р
(5) здОрово!
   Gloom
8 - 25.11.04 - 10:51
   Дяпти
9 - 25.11.04 - 10:54
(8) Во во, только вспоминал :-))) Новосибирск опять за свое.



Список тем форума

Форум Территория 1С

Рекламное место пустует   Рекламное место пустует
Здесь можно задать вопрос "Как сделать?" и получить кучу ответов, что тебе это делать не надо. Ymryn
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует