Нужна помощь с запросом...

Обсуждение технических вопросов работы с системами управления базами данных (СУБД), работе с языком SQL и скриптовыми языками.
Ответить
Аватара пользователя
Александр
Активный участник
Сообщения: 1652
Зарегистрирован: 24 авг 2006, 08:06
Используемое ПО: Lotsia PDM PLUS
Откуда: 55.745578,37.665825

Нужна помощь с запросом...

Сообщение Александр »

все пытаюсь ускорится с выводом всех атрибутов но уже не одного объекта а нескольких
в 2005 сервере есть поворот на 90 гр - вот только никак не пойму как применить данный запрос для нескольких id

Код: Выделить всё

 select * 
  from (select attr.id as IdTypeAttr,
               case when attr.data_type = 'S' then cast(isNull(sv.value,'')+isNull(sv.value1,'') as sql_variant)
                    when attr.data_type = 'T' then cast(dv.value as sql_variant)
                    when attr.data_type = 'N' then cast(nv.value as sql_variant) end as aValue   
          from (select * from LSDBO.attrib_value as av where av.Object_id=100000031100016) as av left join
                              LSDBO.attrib as attr on attr.id = av.Attrib_ID left join
                              LSDBO.value_string as sv on sv.id = av.Value_ID left join
                              LSDBO.value_datetime as dv on dv.id = av.Value_ID left join
                              LSDBO.value_numeric as nv on nv.id = av.Value_id) AS SourceTable
 Pivot
       (max(aValue)
        for IdTypeAttr in ([100004068400000],[100004081100000],[100004081600000],[100004086200000],[100004086700000],[100004091100000],[100004091200000],[100004964000000]) -- тут пишем id каких атрибутов нужны
        ) AS PivotTable
Андрей, Юрий подскажите как сюда прикрутить выборку с id'шниками объектов и получить нужные атрибуты нужных объектов одним запросом??????

ps
уровень совместимости базы должен быть 90, у нас после перехода с 2000 на 2005 был 80 - вроде поправили на 90... еще ничего не вылезло

Софт - RicCRM<<LotsiaPDM(4.40)<<MsSQL(5/8)
Уровень администрирования - Альтернативный

Юрий
Активный участник
Сообщения: 239
Зарегистрирован: 13 янв 2005, 14:30
Используемое ПО: Lotsia PDM PLUS LT
Откуда: Украина, Донецк
Контактная информация:

Re: Нужна помощь с запросом...

Сообщение Юрий »

Самый оптимальный способ это запрос типа:

Код: Выделить всё

select tr1.link_id, attr.*, sv.*, dv.*, nv.*
from 
LSDBO.tree_link tr1 
inner join LSDBO.attrib_value as av on av.Object_id=tr1.link_id and tr1.parent_id=100000383030070 and tr1.link_filial_id=1

left join LSDBO.attrib as attr on attr.id = av.Attrib_ID 
left join LSDBO.value_string as sv on sv.id = av.Value_ID 
left join LSDBO.value_datetime as dv on dv.id = av.Value_ID 
left join LSDBO.value_numeric as nv on nv.id = av.Value_id
Все что выше
inner join LSDBO.attrib_value as av on av.Object_id=tr1.link_id and tr1.parent_id=100000383030070 and tr1.link_filial_id=1
Является выборкой ид объектов, это необязательно таблица дерева связей могут быть и другие варианты
но они должны в результате возвращять множество идентификаторв объектов котрые участвуют
в филтре av.Object_id=tr1.link_id

Затем при развороте у нас ключевое поле tr1.link_id идентификатор объектов для группировки.

С виду не так понятно и удобно, но это оптимальный вариант.
Ответить