Как преобразовать данные доступа, аналогичные перекрестной таблице

#sql #ms-access #crosstab

Вопрос:

У меня есть данные, которые я хочу отобразить, похожие на запрос с перекрестными вкладками, но не совсем. Данные, которые у меня есть, выглядят так: каждый сегмент данных находится в другой строке: Данные по каждой строке

Я хочу, чтобы данные были объединены в одну строку для каждого клиента, вот так: Данные все в одной строке

Я попытался сделать это с помощью запроса с перекрестными вкладками, но я не хочу суммировать какие-либо поля, и для каждого продукта есть несколько точек данных (тип, название, дата покупки и т. Д.).

Любая помощь будет очень признательна!

Ответ №1:

Не очень практичное представление данных, но это возможно. Нужно поле уникального идентификатора — должен служить автономер — я назвал его RID. Считать:

Запрос 1:

 SELECT RID, ID, FirstName, LastName, Dept, ProductType AS Data, "PT" AS Cat FROM Table1
UNION SELECT RID, ID, FirstName, LastName, Dept, ProductName, "PN" FROM Table1
UNION SELECT RID, ID, FirstName, LastName, Dept, PurchaseDate, "PD" FROM Table1
UNION SELECT RID, ID, FirstName, LastName, Dept, PurchaseCost, "PC" FROM Table1
UNION SELECT RID, ID, FirstName, LastName, Dept, DeliveryDate, "DD" FROM Table1;
 

Запрос 2:

 TRANSFORM First(Query1.Data) AS FirstOfData
SELECT Query1.ID, Query1.FirstName, Query1.LastName, Query1.Dept
FROM Query1
GROUP BY Query1.ID, Query1.FirstName, Query1.LastName, Query1.Dept
PIVOT DCount("*","Query1","ID=" amp; [ID] amp; " AND Cat='" amp; [Cat] amp; "' AND RID<" amp; [RID]) 1 amp; [Cat];
 

Однако существует ограничение в 255 полей, поэтому данных может быть больше, чем может быть обработано.

Комментарии:

1. Спасибо за вашу помощь, очень признателен!