2016-12-20 2 views
1

В пределах excel я подключил к нему свою базу данных Microsoft SQL Server, чтобы отобразить результаты. Система, которую я установил на месте, строится из формы. Если пользователь выбирает опцию 1, результаты запроса будут показывать:Изменить расположение столбца инструкции SQL в Excel

Select person, car, house from mytable1 

Если пользователь выбирает вариант 2, результат запроса будет показывать:

Select job, person, land, truck from mytable2 

Самый первый оператор выбора даст мне таблицу в столбце, в которой я бы хотел. Однако, поскольку пользователь снова использует форму, он будет повторно запрашивать его, чтобы использовать запрос, который когда-либо выбирается. Когда выполняется повторный запрос, порядок столбцов, которые отображаются в разных местах, находится в разных областях. Даже если выбранный статус указан в том же порядке. Есть ли способ, которым я мог бы упорядочить столбцы в определенном порядке?

Я попытался снять флажок «Сохранять сортировку столбцов» в свойствах диапазона данных, но заканчивает тем, что оставляет пустые столбцы. И.Е. : Column1, Column2, Column3, etc.

+0

Вы не можете отказаться от 'QueryTable' и повторно генерировать его каждый раз? –

+0

* База данных Microsoft SQL * - к которой вы обращаетесь? Microsoft ** SQL Server ** - система РСУБД от Microsoft или MS Access с SQL в качестве языка запросов. Не совсем понятно - добавьте соответствующий тег - либо 'sql-server', либо' ms-access', чтобы уточнить –

+0

Порядок полей в вашем запросе определяет порядок выходной таблицы.Почему бы вам просто не изменить запрос на вывод в том порядке, в котором вы хотите? – nbayly

ответ

1

Возможно, вы уже знаете это, но поскольку Excel позволяет перемещать столбцы в таблице/ListObject, он стремится сохранить любые сделанные вами изменения. Так, при выполнении запроса:

select one, two, three 

А затем переместить столбец «три» перед «один», когда вы повторно запустить запрос, он будет держать их в том порядке, в ListObject, даже хотя в запросе говорилось иначе.

Это также означает, что если вы добавите столбец, независимо от того, где вы его добавите, он перейдет в конец, когда MS Query отобразит результат.

select four, one, two three 

(«четыре» идет до конца в Excel, даже если он был включен первый в SQL)

В вашем примере столбец «лицо» было распространено по двум запросам, поэтому Excel (MS Query) переместит его в первую позицию и поместит после этого все остальные столбцы.

Когда Excel удаляет старые столбцы, он оставляет трассировку позади - вы можете заметить, что столбцы, следующие за вашей таблицей, не являются нормальным размером; они представляют собой размер полей, которые были удалены. Я называю их «призраками».

Это серьезный взлом, но единственный способ облегчить эту проблему - запустить поддельный запрос (то есть select 1), удалить призраки - удалить все столбцы, а затем запустить второй запрос. Вот некоторый уродливый код я использую в VBA, чтобы сделать это:

Dim lo As ListObject 
Set lo = Sheets("Sheet1").ListObjects("Table_ExternalData_1") 

Range(lo.HeaderRowRange.Offset(0, lo.HeaderRowRange.Columns.Count), _ 
    Range("XFD1")).EntireColumn.Delete 

Да, это удаляет каждый столбец после таблицы, что означает, если есть полезные данные выше или ниже таблиц в колонках после таблицы, те вытер.

Возможно, есть лучший способ - мне любопытно узнать, есть ли у вас какие-либо другие решения.

+0

Кажется, решения должны быть довольно ограниченными ха-ха. Я очень ценю ваш ответ, так как это помогло мне решить мою проблему. Я закончил делать «SELECT top 0 NULL;» затем обновите перед каждым официальным вызовом select. – Brad