1

Я вытягиваю свои волосы на этом. Я не очень разбираюсь в формулах кодирования.Crystal Reports/конкатенация строк на основе изменения значения повторяющегося поля

У меня есть база данных два столбца, выглядит следующим образом:

USERID1  1/1/2000 
USERID1  2/1/2000 
USERID1  3/3/2001 
USERID2  1/5/2000 
USERID2  2/7/2001 
USERID2  3/30/2009 
USERID2  3/10/2013 
USERID3  2/5/2000 
USERID3  3/7/2001 
USERID3  5/30/2009 
USERID3  9/10/2013 

Я думаю, что нужно что-то пошагово все строки, которые относятся к USERID1 и записать их все в одной строке:

USERID1 1/1/2000 2/1/2000 3/3/2001

Затем переходите к следующему USERID значения и записать связанные даты:

USERID2 1/5/2000 2/7/2001 3/30/2009 3/10/2013

Как видно выше, общее количество записей для каждого значения USERID отличается.

Результаты могут быть объединены запятыми или отдельными полями.

Я попытался использовать опцию «несколько столбцов» в разделе «Эксперт раздела» и попробовал различные формулы конкатенации, но не смог получить правильный синтаксис для типов данных и не видел, как проходить через столбец А и измените ввод массива, когда значение изменится в столбце a.

+0

Какую платформу базы данных вы используете? В Oracle есть функция listagg: http://dba.stackexchange.com/questions/20602/oracle-listagg-forces-sort-group-by-execution-plan – Sun

ответ

3

Добавить группу на USERID.

Добавить эту формулу в разделе заголовка группы и подавить его:

// {@reset} 
WhilePrintingRecords; 
StringVar Array reset; 
StringVar Array dates:=reset; 
True; // return a dummy value 

Добавить эту формулу в разделе детали и подавить его:

// {@serialize} 
WhilePrintingRecords; 
StringVar Array dates; 

Redim Preserve dates[Ubound(dates)+1]; 
dates[Ubound(dates)]:=ToText({table.date_field,"MM/dd/yyyy"); 

Добавить эту формулу для колонтитула секции группы:

//{@display} 
WhilePrintingRecords; 
StringVar Array dates; 
Join(dates, ","); 
+0

Спасибо Крэйгу, я очень ценю ответ. – user2544132

+0

Я использую Crystal Reports 11.5, и все выглядит хорошо, за исключением @reset, я получаю всплывающее сообщение о том, что «результат формулы не может быть массивом» – user2544132

+0

Спасибо Крейг, код revison работал! – user2544132

Смежные вопросы