2

Я написал запрос 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. В окне «Импорт данных» я нажимаю «Свойства» и вставляю упомянутый запрос:

настройка - соединение с SQL Server

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

в Excel получен только первый результат запроса

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

2 ответа2

1

Excel не поддерживает несколько операторов SQL в одном соединении.

В качестве обходного пути вы можете использовать макрос, эмулирующий желаемую функциональность.

Другие вопросы, поднятые в комментариях:

  • Планирует ли Microsoft добавить эту функциональность в будущих версиях Excel: я не являюсь сотрудником MS и не знаю их планов.
    Однако, похоже, что это не та функциональность, которая требуется многим пользователям, я не ожидаю, что разработка сосредоточится на этом.
  • Поддерживают ли другие подобные инструменты (например, open office) несколько операторов SQL? Я не знаю эти инструменты.
-1

Для этого вы можете использовать несколько 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

Первый прост и удобен, надеюсь, это поможет вам.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .