Добрый день!
Перерыл интернет, решения не нашел.
Прикрепил наглядную модель.
У меня есть две таблицы, которые заполняют два сотрудника - Ваня и Вася - на практике это расходы с разбивкой по городам. Сотрудникам так удобнее заполнять данные.
Хочу построить сводную таблицу по всем сотрудникам, но при этом в источнике данных столбцы с названиями городов превращаются в два столбца:
1) Название города;
2) Сумма по городу;
Сейчас я смог сделать два решения
Решение 1: через 3 подключения
1-е и 2-е подключения собирают данные из файлов Вани и Васи в файл "Сводная" в соответствующие листы, при этом SQL запрос строится из нескольких подзапросов, которые переворачивают данные под нужный формат.
3-е подключение соединяет данные из двух листов этой же книги "Сводная" и строит по ним сводную таблицу.
Плюс данного решения - понятные SQL запросы.
Решение 2: через 1 подключение (сложное)
Берем SQL 1-го и 2-го подключения из Решения 1 и соединяем через UNION ALL
SQL получается не читаемым и громоздким
Плюс этого решения перед первым в том, что файл со сводной таблицей можно копировать и распространять, чего не скажешь о первом решении, ведь там последнее подключение привязано к конкретному файлу, и если его никто вовремя не откроет, то распространяемый файл отобразит не обновленные данные...
В данной модели это терпимо, так как столбцов мало.
Вопрос:
В реальности столбцов по городам 17 и сотрудников больше.
Использовать 2-е решение нереально, SQL будет не обосновано огромным.
Прошу Вас помочь составить одного SQL запроса таким образом, чтобы он выполнил пошаговые действия:
1) Сначала соединил все таблицы пользователей, результату подзапроса присвоим псевдоним tb1;
2) Потом по псевдониму tb1 совершил "разгруппировку" данных по всем городам, результату дадим псевдоним tb2;
3) После чего INNER JOIN по tb1.ID=tb2.ID;
Проблема вся в псевдонимах...
Я не могу сообразить как сделать SQL запрос оптимальным, и как добиться использования одного псевдонима для нескольких подзапросов, может все это надо обернуть в еще один SELECT?.
Элегантное решение этого вопроса будет полезно многим!)
Ведь для составления сводной таблицы по данным от разных пользователей, потребуется прописать всего одно подключение, это очень удобно и сильно облегчит процессы контроля и отчетностей.
Заранее спасибо за Ваши комментарии!)))
Перерыл интернет, решения не нашел.
Прикрепил наглядную модель.
У меня есть две таблицы, которые заполняют два сотрудника - Ваня и Вася - на практике это расходы с разбивкой по городам. Сотрудникам так удобнее заполнять данные.
Хочу построить сводную таблицу по всем сотрудникам, но при этом в источнике данных столбцы с названиями городов превращаются в два столбца:
1) Название города;
2) Сумма по городу;
Сейчас я смог сделать два решения
Решение 1: через 3 подключения
1-е и 2-е подключения собирают данные из файлов Вани и Васи в файл "Сводная" в соответствующие листы, при этом SQL запрос строится из нескольких подзапросов, которые переворачивают данные под нужный формат.
3-е подключение соединяет данные из двух листов этой же книги "Сводная" и строит по ним сводную таблицу.
Плюс данного решения - понятные SQL запросы.
Решение 2: через 1 подключение (сложное)
Берем SQL 1-го и 2-го подключения из Решения 1 и соединяем через UNION ALL
SQL получается не читаемым и громоздким
Плюс этого решения перед первым в том, что файл со сводной таблицей можно копировать и распространять, чего не скажешь о первом решении, ведь там последнее подключение привязано к конкретному файлу, и если его никто вовремя не откроет, то распространяемый файл отобразит не обновленные данные...
В данной модели это терпимо, так как столбцов мало.
Вопрос:
В реальности столбцов по городам 17 и сотрудников больше.
Использовать 2-е решение нереально, SQL будет не обосновано огромным.
Прошу Вас помочь составить одного SQL запроса таким образом, чтобы он выполнил пошаговые действия:
1) Сначала соединил все таблицы пользователей, результату подзапроса присвоим псевдоним tb1;
2) Потом по псевдониму tb1 совершил "разгруппировку" данных по всем городам, результату дадим псевдоним tb2;
3) После чего INNER JOIN по tb1.ID=tb2.ID;
Проблема вся в псевдонимах...
Я не могу сообразить как сделать SQL запрос оптимальным, и как добиться использования одного псевдонима для нескольких подзапросов, может все это надо обернуть в еще один SELECT?.
Элегантное решение этого вопроса будет полезно многим!)
Ведь для составления сводной таблицы по данным от разных пользователей, потребуется прописать всего одно подключение, это очень удобно и сильно облегчит процессы контроля и отчетностей.
Заранее спасибо за Ваши комментарии!)))
Изменено: - 08.10.2015 13:41:37