У меня есть набор данных, который выглядит следующим образом:
PRODUCT_ID PRODUCT_DESC TYPE_ID
2 Meat 1
2 Pasta 2
2 Milk 3
2 Bread 4
2 Fruit 11
3 Meat 1
3 Pasta 2
3 Milk 3
3 Bread 4
3 Herbs 5
3 Vegetables 6
3 Beer 7
3 Wine 8
3 Brandy 9
3 Juice 10
3 Fruit 11
3 Soda 12
4 Meat 1
4 Pasta 2
4 Milk 3
4 Bread 4
4 Fruit 11
5 Meat 1
5 Pasta 2
5 Milk 3
5 Bread 4
5 Herbs 5
5 Vegetables 6
5 Beer 7
5 Wine 8
5 Brandy 9
5 Juice 10
5 Fruit 11
5 Soda 12
6 Pasta 2
6 Herbs 5
6 Vegetables 6
6 Beer 7
6 Wine 8
6 Brandy 9
6 Juice 10
6 Soda 12
7 Pasta 2
7 Herbs 5
7 Vegetables 6
7 Beer 7
7 Wine 8
7 Brandy 9
7 Juice 10
7 Soda 12
Приведенные выше данные должны быть сгруппированы по идентификатору продукта. Вот пример того, как я хотел бы организовать данные:
PRODUCT ID
2 TYPE_ID 1,2,3,4,11
PRODUCT_DESC Meat,Pasta,Milk,Bread,Fruit
3 TYPE_ID 1,2,3,4,5,6,7,8,9,10,11,12
PRODUCT_DESC Meat,Pasta,Milk,Bread,Herbs,Vegetables,Beer,Wine,Brandy,Juice,Fruit,Soda
4 TYPE_ID 1,2,3,4,11
PRODUCT_DESC Meat,Pasta,Milk,Bread,Fruit
5 TYPE_ID 1,2,3,4,5,6,7,8,9,10,11,12
PRODUCT_DESC Meat,Pasta,Milk,Bread,Herbs,Vegetables,Beer,Wine,Brandy,Juice,Fruit,Soda
6 TYPE_ID 2,5,6,7,8,9,10,12
PRODUCT_DESC Pasta,Herbs,Vegetables,Beer,Wine,Brandy,Juice,Soda
7 TYPE_ID 2,5,6,7,8,9,10,12
PRODUCT_DESC Pasta,Herbs,Vegetables,Beer,Wine,Brandy,Juice,Soda
В приведенном выше примере элементы данных группируются по идентификатору продукта, а затем создается список для описания и типа продукта. Мне интересно, как лучше всего этого добиться? Я знаю, что одним из способов было бы l oop поверх структуры создания данных и заполнение ключей. Затем во второй итерации проверьте, существует ли ключ в структуре, и добавьте элементы в список.
Это сработает, но, очевидно, я хотел бы по возможности исключить повторение цикла дважды для одного и того же набора данных. Кроме того, мне интересно, можно ли организовать данные в SQL Sybase ASE?
Вот решение, которое я получил в ColdFusion с использованием структуры и массивов:
strProducts = structNew();
for ( row in qryProducts ) {
if ( !structKeyExists(strProducts , row.product_id) ) {
strProducts[row.product_id] = {type_id: [row.type_id], product_desc: [row.product_desc]};
} else {
arrayAppend(strProducts[row.product_id].type_id, row.type_id);
arrayAppend(strProducts[row.product_id].product_desc, row.product_desc);
}
}
Если у кого-нибудь есть предложения о том, как это можно сделать, дайте мне знать. Спасибо.