2011-02-10 6 views
5

У меня есть SQL-оператор выбора, как это:Как добавить заголовки столбцов таблицы в SQL оператора SELECT

select FirstName, LastName, Age from People 

Это вернет мне что-то вроде таблицы:

Peter Smith 34 
John Walker 46 
Pat Benetar 57 

То, что я хочу, чтобы вставьте заголовки столбцов в первый ряд, например:

First Name Last Name Age 
=========== ========== ==== 
Peter  Smith  34 
John  Walker  46 
Pat   Benetar 57 

Может кто-нибудь предложить, как это можно достичь?

Не могли бы вы создать временную таблицу с заголовками и добавить данные к ней?

+1

Если вы хотите добавить заголовок в КАЖДОЙ столбец, включая столбцы NON-VARCHAR, у вас есть много проблем с этим подходом (если вы настаиваете на уровне базы данных) – RichardTheKiwi

ответ

7

Ни один из ответов выше не будет работать, если только все ваши имена не появятся после «первого» в порядке сортировки.

Select FirstName, LastName 
from (
    select Sorter = 1, FirstName, LastName from People 
    union all 
    select 0, 'FirstName', 'LastName') X 
order by Sorter, FirstName -- or whatever ordering you need 

Если вы хотите сделать это, чтобы все столбцы, не VARCHAR, как хорошо, CONS (по крайней мере):

  1. ВСЕ ваши данные станут VARCHAR. Если вы используете Visual Studio, например, вы НЕ ДОЛЖНЫ быть в состоянии распознавать или использовать значения даты. Или значения int. Или любой другой в этом отношении.
  2. Вам необходимо явно указать формат значений даты и времени, таких как DOB. Значения DOB в Varchar в формате dd-mm-yyyy (если это то, что вы решили включить) не будут сортироваться должным образом.

SQL, для достижения этой цели, однако не рекомендовал, является

Select FirstName, LastName, Age, DOB 
from (
    select Sorter = 1, 
     Convert(Varchar(max), FirstName) as FirstName, 
     Convert(Varchar(max), LastName) as LastName, 
     Convert(Varchar(max), Age)  as Age, 
     Convert(Varchar(max), DOB, 126) as DOB 
    from People 
    union all 
    select 0, 'FirstName', 'LastName', 'Age', 'DOB') X 
order by Sorter, FirstName -- or whatever ordering you need 
+0

@cyberwiki: да, я потерпел неудачу с 'UNION ALL'. По какой-то причине я использую только уникальные значения из разных наборов. Благодарю. – zerkms

+0

+1 @cyberkiwi: хороший момент, чтобы упомянуть о возможной проблеме, когда дело доходит до заказа –

1

Самый легкий вес способ сделать это, вероятно, сделать UNION:

SELECT 'FirstName' AS FirstName, 'LastName' AS LastName 
UNION ALL 
SELECT FirstName, LastName 
FROM People 

Нет необходимости создавать временные таблицы.

+1

Вы не сможете определить, является ли имя «FirstName», поскольку он сортируется в любом месте в данных. – RichardTheKiwi

+0

@cyberkiwi: нет 'order by' - поэтому' UNION ALL' просто добавит второй результат к первому. – zerkms

+0

Привет, хороший ответ. Однако я сделал свой пример для примера слишком упрощенным. Выключает один из столбцов не из строкового типа, т.е. Возраст, чтобы они, похоже, столкнулись, когда вы объединились. Есть ли способ обойти это? Теперь изменили вопрос. –

0

UNION All это решение, кроме него должно быть указано, что:

  1. Чтобы добавить заголовок для столбца, отличного от char, потребуется преобразовать столбец в первой части запроса.
  2. Если преобразованное столбец используется как часть порядка сортировки, то опорное поле должно быть на имя столбца в запросе, не таблица

пример:

Select Convert(varchar(25), b.integerfiled) AS [Converted Field]... 
... Order by [Converted Field] 
Смежные вопросы