DQL / SQL to Excel - получить результаты нескольких операторов SELECT в электронной таблице
734
matandked
Я написал запрос T-SQL, который содержит несколько отдельных операторов SELECT. Каждый оператор SELECT возвращает различное количество столбцов и представляет разные свойства / функции, поэтому я не хочу объединять их все в один SELECT / в один результат.
Для визуализации моего запроса приведу упрощенный пример:
DECLARE @myNumber bigint; SET @myNumber = 5426; SELECT 'This' as col1, 'is' as col2, 'my' as col3, 'number:' as col4, @myNumber as col5 SELECT 'and' as column1, 'the half' as column2, @myNumber/2 as column3 SELECT * FROM (SELECT 'some' as column1, 'union' as column2 UNION ALL SELECT 'second' as column1, 'case' as column2 ) as someData
Вот как это выглядит в SQL Server Management Studio после выполнения запроса:
Теперь я хотел бы получить точно такие же результаты запроса в Excel. Я иду в Данные -> Из других источников -> Из SQL Server. В окне «Импорт данных» я нажимаю «Свойства» и вставляю упомянутый запрос:
К сожалению, только первый результат запроса SELECT отображается в Excel.
Можно ли получить все результаты запроса в Excel?
Я не думаю, что вы могли бы сделать это в одном соединении, использовать три разных соединения на трех разных листах.
Máté Juhász 6 лет назад
0
Хорошо, но я бы предпочел определить параметр в одном месте - будет ли это возможно с тремя отдельными соединениями?
matandked 6 лет назад
0
В настоящее время Excel НЕ поддерживает несколько операторов SQL в одном соединении. Полная остановка. (вы можете написать макрос для запуска запросов и эмулировать желаемое поведение, однако это значительно увеличивает сложность).
Máté Juhász 6 лет назад
0
Возможно ли это сделать в LibreOffice? Есть ли планы добавить такую функцию в следующих версиях Excel? Может быть, вы могли бы добавить свой комментарий в качестве ответа, чтобы я мог пометить его как принятый ответ?
matandked 6 лет назад
0
2 ответа на вопрос
1
Máté Juhász
Excel не поддерживает несколько операторов SQL в одном соединении.
В качестве обходного пути вы можете использовать макрос, эмулирующий желаемую функциональность.
Другие вопросы, поднятые в комментариях:
Планирует ли Microsoft добавить эту функциональность в будущих версиях Excel: я не являюсь сотрудником MS и не знаю их планов. Однако, похоже, что это не та функциональность, которая требуется многим пользователям, я не ожидаю, что разработка сосредоточится на этом.
Поддерживают ли другие подобные инструменты (например, open office) несколько операторов SQL? Я не знаю эти инструменты.
-2
Rajesh S
Для этого вы можете использовать несколько UNION, ниже приведены несколько примеров строк кода SQL-запросов, которые помогут вам решить проблему.
SELECT Distinct value From ((Select field1 as value from table1 where data = value) union all (Select field2 from table1 where data = value) union all (Select field1 from table2 where data = value) union all (Select field2 from table2 where data = value) ) t
или так должно быть,
SELECT DISTINCT a.Field FROM ( SELECT b.Field FROM Table1 tab CROSS APPLY ( SELECT c.Field1 AS Field UNION ALL SELECT c.Field2 AS Field ) AS X UNION ALL SELECT b.Field FROM Table2 tab CROSS APPLY ( SELECT c.Field1 AS Field UNION ALL SELECT c.Field2 AS Field ) AS x ) y
Первый прост и удобен, надеюсь, это поможет вам.
`UNION` требует, чтобы разные результаты имели одинаковое количество столбцов и типов данных, это не тот случай, о котором идет речь.
Máté Juhász 6 лет назад
0
@ MátéJuhász ,, оба работают в SQL SERVER 2007, и это была единственная возможность соединить все 3 ,, затем перейти на EXCEL, поскольку база данных импорта Excel не поддерживает то, что пытался OP.
Rajesh S 6 лет назад
0
Хотя ваш запрос работает, он не решает проблему. Это также не объясняет, в какой степени это решение и какие компромиссы необходимы.
Máté Juhász 6 лет назад
0
Ценные дополнения от eXperts могли бы улучшить Solution ,,, помогите OP ,,, предложите несколько строк кода SQL.
Rajesh S 6 лет назад
0