如何在选择结果集的顶部添加"自定义"行?

Car*_*ven 5 sql t-sql sql-server

我可以使用t-sql这样的select语句选择并提取记录列表:

select * from [dbo].[testTable];
Run Code Online (Sandbox Code Playgroud)

但是,如何在结果集的顶部添加"自定义"行?

例如,如果结果集是:

John    john@email.com
Max     max@domain.com
Run Code Online (Sandbox Code Playgroud)

我想添加一个不是从表中的行到结果集,以便它看起来像这样:

Name    Email
John    john@email.com
Max     max@domain.com
Run Code Online (Sandbox Code Playgroud)

我想这样做的原因是因为我要通过sqlcmd将它导出到csv文件中,我想在那些"自定义行"中添加标题.

Gor*_*off 8

这是安全的方法:

select name, email
from ((select 'name' as name, 'email' as email, 1 as which
      ) union all
      (select name, email, 2 as which from [dbo].[testTable]
      )
     ) t
order by which;
Run Code Online (Sandbox Code Playgroud)

在实践中,union all将工作:

      select 'name' as name, 'email' as email
      union all
      select name, email from [dbo].[testTable]
Run Code Online (Sandbox Code Playgroud)

但是,我找不到保证第一个子查询在第二个子查询之前完成的文档.SQL Server 的底层运算符确实具有此行为(或者至少在我上次调查它时在SQL Server 2008中执行过此操作).


cod*_*eim 5

SELECT name, email FROM (
   SELECT 'Name' AS Name, 'Email' AS Email, 1 AS o
   UNION ALL
   SELECT name, email, 2 AS o FROM testTable
) t
ORDER BY o, name
Run Code Online (Sandbox Code Playgroud)

添加 o 列以对 UNION 的结果集进行排序,以便确保第一个结果集出现在顶部。