2011-02-10 12 views
5

Ho uno SQL istruzione select in questo modo:Come aggiungere intestazioni delle colonne tabella per SQL SELECT

select FirstName, LastName, Age from People 

Questo mi restituirà qualcosa di simile a un tavolo:

Peter Smith 34 
John Walker 46 
Pat Benetar 57 

Quello che voglio è quello di inserire le intestazioni delle colonne nella prima fila come:

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

qualcuno può suggerire come questo potrebbe essere realizzato?

Potresti forse creare una tabella temporanea con i titoli e aggiungere i dati a questo?

+1

Se vuoi aggiungere un'intestazione a OGNI colonna incluse le colonne NON-VARCHAR, hai molti problemi con questo approccio (se insisti sul livello del database) – RichardTheKiwi

risposta

7

Nessuna delle risposte di cui sopra funzionerà, a meno che tutti i vostri nomi vengano dopo "prima" in ordine.

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 

Se si vuole fare questo per tutte le colonne non varchar pure, i contro sono (almeno):

  1. tutti i vostri dati saranno VARCHAR. Ad esempio, se si utilizza Visual Studio, NON sarà più possibile riconoscere o utilizzare i valori di data. O valori int. O qualsiasi altro per quella materia.
  2. È necessario fornire esplicitamente un formato ai valori datetime come DOB. I valori DOB in Varchar nel formato gg-mm-aaaa (se è quello in cui scegli di trasformarli) non verranno ordinati correttamente.

SQL per ottenere questo, tuttavia non-raccomandato, è

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: sì, ho fallito con' UNION ALL'. Per qualche motivo, penso che richieda solo valori unici provenienti da diversi set. Grazie. – zerkms

+0

+1 @cyberkiwi: buon punto per menzionare il possibile problema quando si tratta di ordinare –

1

Il modo più leggero peso per fare questo è probabilmente di fare un UNION:

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

Non c'è bisogno di creare tabelle temporanee.

+1

Non sarai in grado di dire se 'FirstName' è un nome, poiché è ordinato ovunque nei dati. – RichardTheKiwi

+0

@cyberkiwi: non esiste 'order by' - quindi' UNION ALL' aggiungerà solo il secondo set di risultati al primo. – zerkms

+0

Ciao, buona risposta. Ho reso il mio esempio di domande troppo semplificato però. Risulta che una delle colonne non è di tipo stringa cioè. Età in modo che sembrano scontrarsi quando si unione. C'è un modo per aggirare questo? Ho modificato la domanda ora. –

0

Il UNION All è la soluzione se si deve rilevare che:

  1. Per aggiungere un'intestazione a una colonna non char richiede la conversione della colonna nella prima parte della query.
  2. Se la colonna convertita viene usato come parte di ordinamento allora il riferimento campo dovrà essere il nome della colonna nella query, non la tabella

esempio:

Select Convert(varchar(25), b.integerfiled) AS [Converted Field]... 
... Order by [Converted Field] 
Problemi correlati