Sql server 作为SQL查询的一部分返回字段名
我需要编写一个Sql语句来传递任何有效的Sql子查询,并返回带有标题的结果集 不知何故,我需要查询结果集,获取字段名并将其作为原始区域数据“联合”的一部分返回,然后将结果传递给导出 下面是我的尝试:我有一个名为“a”的子查询,它返回一个数据集,我需要查询它的字段名?通常可能Sql server 作为SQL查询的一部分返回字段名,sql-server,tsql,Sql Server,Tsql,我需要编写一个Sql语句来传递任何有效的Sql子查询,并返回带有标题的结果集 不知何故,我需要查询结果集,获取字段名并将其作为原始区域数据“联合”的一部分返回,然后将结果传递给导出 下面是我的尝试:我有一个名为“a”的子查询,它返回一个数据集,我需要查询它的字段名?通常可能 select A.fields[0].name, A.fields[1].name, A.fields[2].name from ( Select 'xxx1' as [Complaint Mechanism] ,
select A.fields[0].name, A.fields[1].name, A.fields[2].name from
(
Select 'xxx1' as [Complaint Mechanism] , 'xxx2' as [Actual Achievements]
union ALL
Select 'xxx3' as [Complaint Mechanism] , 'xxx4' as [Actual Achievements]
union ALL
Select 'xxx5' as [Complaint Mechanism] , 'xxx6' as [Actual Achievements] ) as A
任何指点都将不胜感激(也许我只是错过了明显的…)
结果集应如下表所示:
F1 F2
--------------------- ---------------------
[Complaint Mechanism] [Actual Achievements]
xxx1 xxx2
xxx3 xxx4
xxx5 xxx6
如果列数是静态的,则可以将数据放入临时表中,然后查询
tempdb.sys.columns
以获取列名,然后可以在数据顶部使用union
。如果列的数量是动态的,则需要使用动态SQL来构建pivot
语句,但这将由您自己决定
这里需要注意的一点是,列名下的所有数据都需要转换为字符串:
select 1 a, 2 b
into #a;
select [1] as FirstColumn
,[2] as SecondColumn
from (
select column_id
,name
from tempdb.sys.columns
where object_id = object_id('tempdb..#a')
) d
pivot (max(name)
for column_id in([1],[2])
) pvt
union all
select cast(a as nvarchar(100))
,cast(b as nvarchar(100))
from #a;
查询结果:
| FirstColumn | SecondColumn |
|-------------|--------------|
| a | b |
| 1 | 2 |
您能否发布一个示例,说明您希望输出的外观?您正在运行哪个版本的SQL Server?SQL 2012/2014我从未在select语句中看到索引[0]。运行上述查询时是否出现错误?我认为这会导致语法错误。根据经验,我知道你的建议不可取。查询结果具有特定类型(例如,INT、DATETIME、NVARCHAR(16)、FLOAT、DECIMAL…)。如果要进行查询以将列名添加到结果中,则必须将原始查询的每一列强制转换为某种(N)VARCHAR(XXX)。此外,我知道的每个环境(如C#)都允许非常轻松地检查结果集,以获得与每个结果列关联的列名。您将更容易接受我的建议,然后创建一个将列名添加为第一行的查询。