如何将表列标题添加到sql select语句中

时间:2011-02-10 23:58:45

标签: sql sql-server tsql header

我有一个像这样的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

有人可以建议如何实现这一目标吗?

您是否可以使用标题创建一个临时表并将数据附加到此处?

3 个答案:

答案 0 :(得分: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。 Varchar中的DOB值格式为dd-mm-yyyy(如果这是你选择将其转换成的那样)将无法正确排序。
  3. 实现这一目标的SQL, not-recommended

    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 :(得分:1)

最轻的方法是做一个UNION:

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

无需创建临时表。

答案 2 :(得分:0)

UNION All是解决方案,但应指出:

  1. 要将标头添加到非char列,需要转换查询第一部分中的列。
  2. 如果转换后的列用作排序顺序的一部分,则字段引用必须是查询中列的名称,而不是表
  3. 示例:

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