2011-02-10 35 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]