2011-02-10 32 views
5

我有一個SQL SELECT語句是這樣的:如何添加表列標題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 2011-02-11 00:10:47

回答

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列爲好,缺點是(至少):

  1. 中的所有數據將成爲VARCHAR。例如,如果您使用Visual Studio,則不會識別或使用日期值。或者int值。或者任何其他的事情。
  2. 您需要明確提供日期時間值(如DOB)的格式。格式爲dd-mm-yyyy的Varchar中的DOB值(如果這是您選擇將其轉換爲的值)將無法正確排序。

的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 
1

最輕重量的方式做,這可能是做一個UNION:

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

無需創建臨時表。

+1

你不能分辨'FirstName'是否是一個名字,因爲它在數據中的任何地方進行排序。 – RichardTheKiwi 2011-02-11 00:03:33

+0

@cyberkiwi:沒有'order by' - 所以`UNION ALL`只會將第二個結果集追加到第一個結果集。 – zerkms 2011-02-11 00:05:55

0

UNION All是,除了它的解決方案應該指出的是:

  1. 要添加頁眉到非char列需要轉換查詢的第一部分中的列。
  2. 如果轉換列用作排序順序的一部分,那麼該字段引用將必須在查詢中的列中,而不是表的名稱

例如:

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