2011-02-10 18 views
5

Mam SQL select tak:Jak dodać nagłówki kolumn tabeli do sql SELECT

select FirstName, LastName, Age from People 

ten powróci mi coś jak stół:

Peter Smith 34 
John Walker 46 
Pat Benetar 57 

Co chcę jest wstaw nagłówki kolumn do pierwszego rzędu, jak:

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

Czy ktoś może zasugerować, w jaki sposób można to osiągnąć?

Czy możesz utworzyć tabelę tymczasową z nagłówkami i dołączyć do niej dane?

+1

Jeśli chcesz dodać nagłówek do KAŻDEJ kolumny, w tym kolumny NIEPOPRAWNE, masz wiele problemów z tym podejściem (jeśli nalegasz na warstwę bazy danych) – RichardTheKiwi

Odpowiedz

7

Żadna z powyższych odpowiedzi nie zadziała, chyba że wszystkie twoje nazwiska pojawią się po "pierwszym" sortowaniu.

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 

Jeśli chcesz zrobić to do wszystkich kolumn niż varchar, jak również, minusy są (przynajmniej):

  1. wszystkie dane staną się VARCHAR. Jeśli korzystasz na przykład z programu Visual Studio, NIE MOŻNA rozpoznać wartości daty ani ich użyć. Lub wartości int. Lub jakikolwiek inny o to chodzi.
  2. Należy jawnie podać format wartości datetime, takich jak DOB. Wartości DOB w Varchar w formacie dd-mm-rrrr (jeśli to, do czego zdecydujesz się je przekształcić) nie będą poprawnie sortowane.

SQL, aby osiągnąć ten cel, jednak nie zalecany, to

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: tak, nie udało mi się z' UNION ALL'. Z jakiegoś powodu, chociaż bierze on unikalne wartości tylko z różnych zestawów. Dzięki. – zerkms

+0

+1 @cyberkiwi: dobry punkt, aby wspomnieć o możliwym problemie przy zamawianiu –

1

Sposób najlżejszy-waga na to jest prawdopodobnie zrobić UNION:

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

ma potrzeby tworzenia tabel tymczasowych.

+1

Nie będziesz w stanie stwierdzić, czy "Imię" jest nazwą, ponieważ jest posortowane w dowolnym miejscu danych. – RichardTheKiwi

+0

@cyberkiwi: nie ma "porządku od" - więc "UNION ALL" po prostu doda drugi zestaw wyników do pierwszego. – zerkms

+0

Cześć, dobra odpowiedź. Zrobiłem jednak mój przykład pytań zbyt uproszczony. Okazuje się, że jedna z kolumn nie jest typu ciąg, czyli. Wiek, więc zdają się kolidować, kiedy jesteście związani. Czy jest na to sposób? Zmodyfikowałem teraz pytanie. –

0

UNION All jest rozwiązaniem oprócz niego należy podkreślić, że:

  1. Aby dodać nagłówek do kolumny bez znaku będzie wymagać przekonwertowania kolumny w pierwszej części zapytania.
  2. Jeśli kolumna konwersji, jest stosowany jako część porządku sortowania, a następnie odniesienie pola musi być nazwą kolumny z zapytania, a nie tabeli

przykład:

Select Convert(varchar(25), b.integerfiled) AS [Converted Field]... 
... Order by [Converted Field] 
Powiązane problemy