Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема SELECT: ПолноеНаименование()+ПолныйКод(). // Как вариант... (число прочтений - 1297 )
kos
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 127
Местоположение: Киев
Зарегистрирован: 03. Марта 2013
SELECT: ПолноеНаименование()+ПолныйКод(). // Как вариант...
10. Февраля 2014 :: 13:13
Печать  
Понадобилось в отчетах выводить

группировка (уровень №1) "ПолноеНаименованиеРодителя" = итог,итог,итог,....
группировка (уровень №2) "ПодчиненныйЭлементВГруппе" = итог,итог,итог,....


На форуме нашел готовые рабочие решения для "поэлементного" ПолноеНаименование()
а не так чтоб в SELECT-е использовать.....

Например темы:
http://www.1cpp.ru/forum/YaBB.pl?num=1294933213
http://www.1cpp.ru/forum/YaBB.pl?num=1249210135
http://www.1cpp.ru/forum/YaBB.pl?num=1175593013
В общем - мне не подходит.

Нашел решение (сильно не бейте).
Оставляю код "без наворотов", как говорится "голая идея".
Кому интересно - пользуйтесь на здоровье. Критика приветствуется.

Код
Выбрать все
--очень грубо, нужно поработать над if exists....
drop table #TTT

create table #TTT
(id char(9) primary key clustered
,parentid char(9)
,code char(8)
,descr char(100)
,isfolder tinyint
,ismark bit
,level int
,fullcode varchar(2400) --- вряд ли кол-во уровней
,fulldescr varchar(2400) --- в справочнике будет больше 24....
)

declare @lvl int
SELECT @lvl = 1

-- загружаем корневые (группы+элементы):
insert into #TTT
select
 SC92.id as id
,SC92.parentid as parentid
,SC92.code as code
,SC92.descr as descr
,SC92.isfolder as isfolder
,SC92.ismark as ismark
,@lvl as level
,ltrim(rtrim(SC92.code)) as fullcode
,ltrim(rtrim(SC92.descr)) as fulldescr
from SC92
where SC92.parentid='     0   '


-- грузим всё что осталось пока количество строк в таблице не выровняется
-- (группы+элементы):

declare @i int
SELECT @i = count(*) FROM SC92
WHILE (SELECT count(*) FROM #TTT) < (@i)
BEGIN
	SELECT @lvl = @lvl+1
	insert into #TTT
	select
	 SC92.id as id
	,SC92.parentid as parentid
	,SC92.code as code
	,SC92.descr as descr
	,SC92.isfolder as isfolder
	,SC92.ismark as ismark
	,@lvl as level
	,ltrim(rtrim(#TTT.fullcode))+'/'+ltrim(rtrim(SC92.code)) as fullcode
	,ltrim(rtrim(#TTT.fulldescr))+'/'+ltrim(rtrim(SC92.descr)) as fulldescr
	from SC92
	inner join #TTT on SC92.parentid=#TTT.id
	where SC92.id not in (select #TTT.id from #TTT)
END

-- посмотрим что загрузилось:
select * from #TTT order by #TTT.fulldescr

 



Что дальше?
А дальше:  можно JOIN-ться к таблице #TTT в своих запросах.....
В общем, как-то так....

  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать