#excel #ms-access #microsoft-query
#excel #ms-access #microsoft-запрос
Вопрос:
У меня есть такая таблица в Excel
ID | NAME | JOB | PRICE
1 | alex | Java | 100
1 | alex | C | 100
1 | alex | PHP | 500
2 | road | Android | 400
2 | road | Ruby | 400
3 | brit | Java | 200
3 | brit | PHP | 500
3 | brit | C | 100
3 | brit | DotNet | 300
Мне нужен вывод в следующем формате
ID | NAME | JOB | PRICE
1 | alex | Java,C ,PHP | 700
2 | road | Android,Ruby | 800
3 | brit | Java, PHP, C, DotNet | 1100
итак, я использую Microsoft Query для генерации этого вывода, используя следующий запрос
Select ID, NAME , GROUP_CONCAT(JOB) ,Sum(PRICE) from Table Group By ID;
но он продолжает показывать мне ошибку .. любое предложение
Комментарии:
1.
GROUP_CONCAT
(и без указания всех неагрегированных столбцов вGROUP BY
) поддерживается MySQL, но ни Access, ни Excel AFAIK.2. Не существует чистого SQL с использованием MS Access SQL для достижения желаемого результата, предполагающего, что это ваш источник данных. Может потребоваться комбинация VBA.
3. у меня есть данные в моем файле excel, поэтому я использую Microsoft Query, чтобы разрешить мне использовать sql-запрос в этих данных для создания таблицы, подобной этой
4. Тогда почему вы помечаете ms-access?
Ответ №1:
Возможно, самое близкое, что вы можете получить с помощью SQL, — это запрос перекрестной таблицы, который доступен на диалекте Jet / ACE SQL. Jet / ACE — это набор Windows.dll-файлы, используемые для подключений ODBC / OLEDB к базам данных MS Access и электронным таблицам Excel. Обратите внимание, что Jet / ACE устанавливает максимальное ограничение в 255 столбцов.
В частности, ниже вычисляется текущее количество заданий в алфавитном порядке (с максимальным количеством повторений), а затем выполняется поворот из этого источника:
TRANSFORM Max(main.Job) As MaxOfJob
SELECT main.ID, main.[Name], Sum(main.PRICE) AS SumOfPrice
FROM (
SELECT i.*, (SELECT Count(*) FROM [Sheet1$] sub
WHERE sub.ID = i.ID AND sub.JOB <= i.JOB) As RunCount
FROM [Sheet1$] i
) AS main
GROUP BY main.ID, main.[Name]
PIVOT main.RunCount;
-- ID Name SumOfPrice 1 2 3 4
-- 1 alex 700 C Java PHP
-- 2 road 800 Android Ruby
-- 3 brit 1100 C DotNet Java PHP
Получив завершенный набор результатов, объедините все пронумерованные ячейки столбца в разделенный запятыми столбец ЗАДАНИЯ с помощью Excel CONCATENATE()
или выполните цикл по каждой ячейке столбца с помощью VBA.
Ответ №2:
То, как вы хотите, чтобы ваша таблица выглядела, включает в себя «Комбинированное поле», которое не одобряется при проектировании базы данных. Ваш первоначальный дизайн правильный в том смысле, что каждый язык занимает по 1 записи в таблице.