DQL / SQL to Excel - получить результаты нескольких операторов SELECT в электронной таблице

694
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 после выполнения запроса:

Result of example query execution

Теперь я хотел бы получить точно такие же результаты запроса в Excel. Я иду в Данные -> Из других источников -> Из SQL Server. В окне «Импорт данных» я нажимаю «Свойства» и вставляю упомянутый запрос:

setting - SQL Server connection

К сожалению, только первый результат запроса SELECT отображается в Excel.

only the first query result is obtained in Excel

Можно ли получить все результаты запроса в Excel?

2
Я не думаю, что вы могли бы сделать это в одном соединении, использовать три разных соединения на трех разных листах. 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

Похожие вопросы