Хм, интересно.
Вот что вы могли бы сделать:
Использование этих исходных данных (MySQL):
create table items (
item varchar(4),
quantity number,
color varchar(10),
);
(вставить данные ...)
create table numbers (i integer)
(вставьте данные 0, 1, 2 .... В MySQL 5.1 есть хранимые процедуры, которые могут это делать, в более ранних версиях для его заполнения понадобился бы внешний скрипт. Перейдите от 0 к наибольшему количеству, которое у вас будет).
Тогда уловка состоит в том, чтобы создать правильный тип запроса. Я придумал это:
select i.*, n.i from
(
select concat(i.item, ' ', i.quantity) as grouping, i.item, i.quantity,group_concat(distinct color) as colors
from items i
GROUP BY item, quantity
) i
cross join numbers n
where quantity > n.i;
например. Если я заполняю свою таблицу чисел и заполняю таблицу элементов данными вашего примера, а затем запускаю запрос, который я получаю:
+----------+------+----------+------------+------+
| grouping | item | quantity | colors | i |
+----------+------+----------+------------+------+
| A001 1 | A001 | 1 | Red,Greem | 0 |
| B002 3 | B002 | 3 | Red,Purple | 0 |
| A001 1 | A001 | 1 | Red,Greem | 1 |
| B002 3 | B002 | 3 | Red,Purple | 1 |
| A001 1 | A001 | 1 | Red,Greem | 2 |
| B002 3 | B002 | 3 | Red,Purple | 2 |
| A001 1 | A001 | 1 | Red,Greem | 3 |
| B002 3 | B002 | 3 | Red,Purple | 3 |
+----------+------+----------+------------+------+
Затем в вашем отчете Jasper трюк состоит в том, чтобы создать группу / группу, которая работает на основе столбца «группировка», и поместить ваш заголовок так:
Item A001, Qty 1, Colors Red, Green
И затем, в разделе подробностей просто укажите строку как единственное в детали.
При этом создается отчет, который вы хотите для меня.
Обратите внимание, что таблица numbers
немного глупа, но представляет собой стандартную технику хранения данных, хотя я подозреваю, что некоторые базы данных (например, Oracle) будут иметь умные рекурсивные процедуры или другие функции, которые исключают необходимость в этом.