将垂直sql结果转换为水平输出
我有一张桌子,t有16行: id int 说明varchar60 平衡小数6,2 我需要描述和平衡数据,并选择描述,平衡从t订单的id将做的工作。但理想情况下,我可以水平显示结果,而不是垂直显示 现在我知道我可以构建一个包含16列的新表,并使用动态sql填充每一列的余额,但是,我也确信使用pivot或类似的工具可以更轻松地完成这项工作,尽管我不太明白如何做到这一点 有人能启发我吗 谢谢将垂直sql结果转换为水平输出,sql,sql-server,pivot,Sql,Sql Server,Pivot,我有一张桌子,t有16行: id int 说明varchar60 平衡小数6,2 我需要描述和平衡数据,并选择描述,平衡从t订单的id将做的工作。但理想情况下,我可以水平显示结果,而不是垂直显示 现在我知道我可以构建一个包含16列的新表,并使用动态sql填充每一列的余额,但是,我也确信使用pivot或类似的工具可以更轻松地完成这项工作,尽管我不太明白如何做到这一点 有人能启发我吗 谢谢 John假设您使用的是SQL Server,则可以实现将数据行转换为列的功能。基本语法为: select *
John假设您使用的是SQL Server,则可以实现将数据行转换为列的功能。基本语法为:
select *
from
(
select description, balance
from yourtable
) d
pivot
(
sum(balance)
for description in ([desc1], desc2]) -- replace this with the names of your descriptions
) piv;
当然,如果描述值的数量未知,则需要使用动态SQL:
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT distinct ',' + QUOTENAME(description)
from yourtable
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT ' + @cols + '
from
(
select description, balance
from yourtable
) x
pivot
(
sum(balance)
for description in (' + @cols + ')
) p '
execute sp_executesql @query
假设您使用的是SQL Server,则可以实现将数据行转换为列的功能。基本语法为:
select *
from
(
select description, balance
from yourtable
) d
pivot
(
sum(balance)
for description in ([desc1], desc2]) -- replace this with the names of your descriptions
) piv;
当然,如果描述值的数量未知,则需要使用动态SQL:
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT distinct ',' + QUOTENAME(description)
from yourtable
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT ' + @cols + '
from
(
select description, balance
from yourtable
) x
pivot
(
sum(balance)
for description in (' + @cols + ')
) p '
execute sp_executesql @query
亲爱的约翰:请告诉我,你正在使用哪些关系数据库管理系统?每个供应商都有可能适用于您的场景的我们的实现。请通过添加适当的标记Oracle、SQL Server、MySQL等来指定您的目标RDBMS。。可能有一些答案利用了并非普遍支持的语言或产品功能。此外,通过使用特定的RDBMS标记,您的问题可能会得到更适合回答它的人的注意。亲爱的约翰:请告诉我,您使用的是哪种RDBMS?每个供应商都有可能适用于您的场景的我们的实现。请通过添加适当的标记Oracle、SQL Server、MySQL等来指定您的目标RDBMS。。可能有一些答案利用了并非普遍支持的语言或产品功能。此外,通过使用特定的RDBMS标记,您的问题可能会得到更适合回答它的人的注意。