Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Отчетные системы [игнор отключен] [закрыт для гостей] / ReportingService 2005, Concat;Join;Split, соединить строки в группировке. / 25 сообщений из 32, страница 1 из 2
12.02.2010, 14:46
    #36466005
fgrelax
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ReportingService 2005, Concat;Join;Split, соединить строки в группировке.
Всем привет.
Сделана группировка по name.
Задача, соединить всех пользователей, привязанных к отчету в одну строку, разделив ";".
При этом на серверной стороне выполнять запрос нельзя, только средствами RS или custom code.

--group by name
name userExecutionLog allReports Brep_Admins Brep_AllReports Brep_Developers Administrators

--split user
name userExecutionLogallReports;Brep_Admins;Brep_AllReports;Brep_Developers;Administrators
...
Рейтинг: 0 / 0
26.02.2010, 14:43
    #36490261
boss1999
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ReportingService 2005, Concat;Join;Split, соединить строки в группировке.
создаешь функцию которая позвращает строку
создаешь глобальную стринговую переменную
и еще одну фукнцию в которую ты будешь передвавать переменные значенния свои юзера

dim str as string = nothing

скажем в серое поле пишешь code.totalstring(Fields!User.Value)

sub TotalString(value as string)
str &= IIf(system.string.IsNullOrEmpty(str), string.Format("{0}", value), string.Format("{0}, ", value))
end sub


а в поле User (reportItems) где надо вывести строку
пишешь =Code.GetString()

function GetString() as string
return str
end function

(может быть сразу можно написать Code.str - точно не знаю проверить нада)

типа как то так
...
Рейтинг: 0 / 0
17.03.2010, 16:11
    #36526558
SQLPowerUser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ReportingService 2005, Concat;Join;Split, соединить строки в группировке.
fgrelax
При этом на серверной стороне выполнять запрос нельзя, только средствами RS или custom code.
Почему на сервере нельзя? Можно.
Сложение символьных полей в запросе для SQL Server 2005
...
Рейтинг: 0 / 0
19.03.2010, 15:53
    #36531301
fgrelax
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ReportingService 2005, Concat;Join;Split, соединить строки в группировке.
SQLPowerUserfgrelax
При этом на серверной стороне выполнять запрос нельзя, только средствами RS или custom code.
Почему на сервере нельзя? Можно.
Сложение символьных полей в запросе для SQL Server 2005

Вопрос в другом. Мне надо обойтись лишь встроенными средствами RS2005.

Здесь по-более рассмотрены варианты.
http://www.simple-talk.com/sql/t-sql-programming/concatenating-row-values-in-transact-sql/
...
Рейтинг: 0 / 0
19.03.2010, 15:56
    #36531317
boss1999
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ReportingService 2005, Concat;Join;Split, соединить строки в группировке.
так вопрос еще актуален? я уж думал давно решился
столько всего рассказали
...
Рейтинг: 0 / 0
22.03.2010, 17:43
    #36535251
fgrelax
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ReportingService 2005, Concat;Join;Split, соединить строки в группировке.
boss1999,

да актуален. Сможешь написать custom code?
...
Рейтинг: 0 / 0
22.03.2010, 17:47
    #36535262
boss1999
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ReportingService 2005, Concat;Join;Split, соединить строки в группировке.
fgrelax,

а тот что выше написал? пробовал подогнать?
...
Рейтинг: 0 / 0
23.03.2010, 11:31
    #36536382
fgrelax
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ReportingService 2005, Concat;Join;Split, соединить строки в группировке.
boss1999,

как в репортинге две функции запихнуть в кастом код?
...
Рейтинг: 0 / 0
23.03.2010, 13:26
    #36536816
boss1999
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ReportingService 2005, Concat;Join;Split, соединить строки в группировке.
Легко !!!!
точно так же как и в обычном VB файле
...
Рейтинг: 0 / 0
23.03.2010, 13:27
    #36536820
boss1999
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ReportingService 2005, Concat;Join;Split, соединить строки в группировке.
пишешь подряд функцию или процедуру
соот-но к примеру
function test() as string
................
return
end function

sub test1
..........
end sub
...
Рейтинг: 0 / 0
23.03.2010, 16:35
    #36537593
fgrelax
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ReportingService 2005, Concat;Join;Split, соединить строки в группировке.
boss1999,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
dim str as string = nothing

sub TotalString(value as string)
str &= IIf(system.string.IsNullOrEmpty(str), string.Format("{0}", value), string.Format("{0}, ", value))
end sub;
function GetString() as string
return str
end function

nameuser=Fields!Name.Value=code.totalstring(Fields!User.Value)=Code.GetString()

The Value Expression for the textbox 'textbox6' contains an error: [BC30491] Выражение не порождает значение
...
Рейтинг: 0 / 0
23.03.2010, 16:36
    #36537594
fgrelax
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ReportingService 2005, Concat;Join;Split, соединить строки в группировке.
fgrelax,

custom code (в предыдущем посте ошибку допустил)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
dim str as string = nothing

sub TotalString(value as string)
str &= IIf(system.string.IsNullOrEmpty(str), string.Format("{0}", value), string.Format("{0}, ", value))
end sub

function GetString() as string
return str
end function
...
Рейтинг: 0 / 0
23.03.2010, 16:42
    #36537621
boss1999
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ReportingService 2005, Concat;Join;Split, соединить строки в группировке.
не работает?
...
Рейтинг: 0 / 0
23.03.2010, 17:00
    #36537677
fgrelax
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ReportingService 2005, Concat;Join;Split, соединить строки в группировке.
boss1999,

The Value Expression for the textbox 'textbox6' contains an error: [BC30491] Выражение не порождает значение
...
Рейтинг: 0 / 0
23.03.2010, 17:02
    #36537685
boss1999
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ReportingService 2005, Concat;Join;Split, соединить строки в группировке.
а 'textbox6' - это какое поле?
...
Рейтинг: 0 / 0
23.03.2010, 17:18
    #36537748
boss1999
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ReportingService 2005, Concat;Join;Split, соединить строки в группировке.
и еще
попробуй

name | user
_______________________________________________________________________
=code.totalstring(Fields!User.Value) | ____________________________
----------------------------------------------- | =Code.GetString()
...
Рейтинг: 0 / 0
23.03.2010, 17:53
    #36537845
fgrelax
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ReportingService 2005, Concat;Join;Split, соединить строки в группировке.
boss1999а 'textbox6' - это какое поле?
=code.totalstring(Fields!UserName.Value)

boss1999и еще
попробуй

name | user
_______________________________________________________________________
=code.totalstring(Fields!User.Value) | ____________________________
----------------------------------------------- | =Code.GetString()

это так? , если да, то не работает, та же ошибка.

name user=code.totalstring(Fields!User.Value)=Code.GetString()[/quote]
...
Рейтинг: 0 / 0
23.03.2010, 18:11
    #36537911
boss1999
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ReportingService 2005, Concat;Join;Split, соединить строки в группировке.
попробуй без иниц. переменной
т.е. просто dim str as string
...
Рейтинг: 0 / 0
23.03.2010, 18:20
    #36537941
boss1999
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ReportingService 2005, Concat;Join;Split, соединить строки в группировке.
слуш а почему нельзя на сервере сделать это? может запрос покажешь?
...
Рейтинг: 0 / 0
24.03.2010, 09:46
    #36538633
fgrelax
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ReportingService 2005, Concat;Join;Split, соединить строки в группировке.
boss1999попробуй без иниц. переменной
т.е. просто dim str as string

так тоже не работает, ошибка та же.

boss1999
слуш а почему нельзя на сервере сделать это? может запрос покажешь?


Да, в принципе, можно.

Я использовал курсор

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
DECLARE @tbl TABLE (id nvarchar( 4000 ) PRIMARY  KEY,  list nVARCHAR(max))

SET NOCOUNT ON

DECLARE @c nvarchar(max), @p nVARCHAR(max), @cNext nvarchar(max), @pNext nVARCHAR(max)

DECLARE c CURSOR FOR

select name, username
from
(select cc.Name, uc.UserName 
from Catalog cc, PolicyUserRole pc, Users uc
where cc.PolicyID = pc.PolicyID and pc.UserID=uc.UserID)d
order by Name, UserName; 

        OPEN c ;

        FETCH NEXT FROM c INTO @cNext, @pNext ;

        SET @c = @cNext ;

        WHILE @@FETCH_STATUS =  0  BEGIN

             IF @cNext > @c BEGIN

                  INSERT @tbl SELECT @c, @p ;

                  SELECT @p = @PNext, @c = @cNext ;

             END ELSE

                  SET @p = COALESCE(@p + ',', SPACE( 0 )) + @pNext ;

             FETCH NEXT FROM c INTO @cNext, @pNext

        END

        INSERT @tbl SELECT @c, @p ;

        CLOSE c ;

DEALLOCATE c ;

SELECT * FROM @tbl ;

Но хотелось понять, можно ли обойтись custom code.
...
Рейтинг: 0 / 0
24.03.2010, 10:19
    #36538717
boss1999
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ReportingService 2005, Concat;Join;Split, соединить строки в группировке.
на самом деле извратиться можно
но придеца кажется отказаться от группировки

по поводу запроса лучше пользовать временной таблицей
к примеру declare @t table(log nvahcar(100), users nvarchar(1000))

insert @t

select cc.Name, uc.UserName
from Catalog cc, PolicyUserRole pc, Users uc
where cc.PolicyID = pc.PolicyID and pc.UserID=uc.UserID
order by Name, UserName

declare @s nvarchar(1000), @l nvarchar(100)
update @t
set @s=users=case when @s=Log then users + ', ' + @s else users end, @l = log

проверь может ошибся
...
Рейтинг: 0 / 0
24.03.2010, 10:20
    #36538720
boss1999
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ReportingService 2005, Concat;Join;Split, соединить строки в группировке.
все таки будет время (чутка разгружусь) попробую сделать с помощью кода в репортинге
...
Рейтинг: 0 / 0
24.03.2010, 10:21
    #36538726
boss1999
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ReportingService 2005, Concat;Join;Split, соединить строки в группировке.
да и
select log,max(users) from @t group by log
...
Рейтинг: 0 / 0
24.03.2010, 10:35
    #36538781
boss1999
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ReportingService 2005, Concat;Join;Split, соединить строки в группировке.
ну вот как и говорил получилось
Было

стало



ну и сама доработанная функция: (custom code)

dim s as string


function sum(value as string, count_all as integer, curr_row as integer) as string
s = s + "; " + value

if count_all = curr_row then
return s
else
return ""
end if
end function




в дизайнере где users пишем
=code.sum( Fields!USERS.Value, rownumber("DataSource1"), CountRows("DataSource1"))

единственное что останется сделать это написать условие видимости строк, ну эт я думаю сам сделаешь, т.е. как то так - если есть значение users то hidden false иначе true
...
Рейтинг: 0 / 0
24.03.2010, 10:36
    #36538785
boss1999
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ReportingService 2005, Concat;Join;Split, соединить строки в группировке.
это датасоурс для теста
SELECT 'Log' AS Log, 'Test1' AS USERS
UNION ALL
SELECT 'Log' AS Log, 'Test2' AS USERS
UNION ALL
SELECT 'Log' AS Log, 'Test3' AS USERS
...
Рейтинг: 0 / 0
Форумы / Отчетные системы [игнор отключен] [закрыт для гостей] / ReportingService 2005, Concat;Join;Split, соединить строки в группировке. / 25 сообщений из 32, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]