如何在sql select语句中添加表格列标题

问题描述 投票:0回答:4

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

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

您可以创建一个包含标题的临时表并将数据附加到其中吗?

sql sql-server t-sql header
4个回答
8
投票

上面的答案都不起作用,除非你所有的名字都按排序顺序出现在“第一个”之后。

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)的格式。 Varchar 中 dd-mm-yyyy 格式的 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

3
投票

执行此操作的最轻量级方法可能是执行 UNION:

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

无需创建临时表。


0
投票

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

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

示例:

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

0
投票

如果您只想在查询输出中包含标题,请在编写查询之前在终端中输入以下内容:

.headers on

这将以以下格式返回您的数据:

First Name|Last Name|Age|
Peter|Smith|34|
John|Walker|46

如果您希望对齐列以提高可读性,请在终端中输入:

.mode column

这将以以下格式返回您的数据:

First Name   Last Name    Age
----------- ----------- ------
Peter        Smith       34
John         Walker      46

如果您想返回格式化为包含标题的表格的查询结果,请在终端中输入:

.mode table

这将以以下格式返回您的数据:

+------------+-----------+-------+
| First Name | Last Name |  Age  |
+------------+-----------+-------+
| Peter      | Smith     |   34  |
| John       | Walker    |   46  |
+------------+-----------+-------+
© www.soinside.com 2019 - 2024. All rights reserved.