sql - 在 SQL Server 中将特定列的值显示为标题

标签 sql sql-server tsql join pivot

我正在创建一个 Web 应用程序,我需要在其中将列值显示为标题

例子

SELECT Name, Leave
FROM tblUser 
INNER JOIN tblLeaveMaster ON tblUser.EmployeeID = tblLeaveMaster.EmployeeID

从该查询中,我得到以下结果:

Name     Leave
---------------
Test1       5
Test2      10
test3       2

现在我想将这些值作为

Test1 Test2 Test3
-----------------
  5     10    2

我怎样才能做到这一点?

最佳答案

你可以试试用pivot

select pv.* from
(SELECT Name,Leave
FROM tblUser INNER JOIN tblLeaveMaster ON tblUser.EmployeeID=tblLeaveMaster.EmployeeID
)X
pivot
(max(leave) for name in ([Test1],[Test2],[Test3])) as pv

对于动态 PIVOT

declare @sql varchar(max)='',@col_list varchar(8000)=''

set @col_list = (select distinct quotename([Name])+',' from (SELECT Name,Leave
    FROM tblUser INNER JOIN tblLeaveMaster ON tblUser.EmployeeID=tblLeaveMaster.EmployeeID
    )X
for xml path(''))

set @col_list = left (@col_list,len(@col_list)-1)

set @sql = 'select '+@col_list+' from
    (SELECT Name,Leave
    FROM tblUser INNER JOIN tblLeaveMaster ON tblUser.EmployeeID=tblLeaveMaster.EmployeeID
    )X
pivot (max([Leave]) for [Name] in ('+@col_list+'))pv'

exec(@sql)

关于sql - 在 SQL Server 中将特定列的值显示为标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53166482/

相关文章:

sql-server - TSQL 触发器维护增量订单完整性

SQL Server - 在子查询中使用 GROUP BY 进行计数

sql - 如何将日期时间列转换为格式为 DD/MM/YYYY 的 nvarchar?

mysql - 带有自动触发器的 SQL 继承

c# - 如何引用 LINQ 中使用保留字命名的字段?

SQL object_definition 返回不同的、不存在的对象的定义?

sql - 如何编写条件 "x = y",使其在 x 和 y 均为 NULL 时为真?

java - 使用 Hibernate 和 Spring 以及 SQLServer 的无效对象名称 'tableName'

sql - 如何将数据库列中可接受的值限制为 1 到 5?

sql - 是否可以在触发器执行之前从SQL Server存储过程中获取输出结果集?