Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将垂直sql结果转换为水平输出_Sql_Sql Server_Pivot - Fatal编程技术网

将垂直sql结果转换为水平输出

将垂直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 *

我有一张桌子,t有16行: id int 说明varchar60 平衡小数6,2

我需要描述和平衡数据,并选择描述,平衡从t订单的id将做的工作。但理想情况下,我可以水平显示结果,而不是垂直显示

现在我知道我可以构建一个包含16列的新表,并使用动态sql填充每一列的余额,但是,我也确信使用pivot或类似的工具可以更轻松地完成这项工作,尽管我不太明白如何做到这一点

有人能启发我吗

谢谢
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标记,您的问题可能会得到更适合回答它的人的注意。