【发布时间】:2011-01-15 21:45:38
【问题描述】:
数据库:SQL Server 2005
我们有一个以这种方式包含数据的表:
Project Year Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
-------------------- ----------- --------------------- --------------------- --------------------- --------------------- --------------------- --------------------- --------------------- --------------------- --------------------- --------------------- --------------------- ---------------------
11-11079 2008 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 75244.90
11-11079 2009 466.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
11-11079 2010 855.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
01-11052 2009 56131.00 0.00 36962.00 -61596.00 2428.00 84.00 0.00 0.00 0.00 0.00 0.00 0.00
有人希望将整个项目的数据显示为一行。这些列将是动态的,取决于它进入未来多少年。一个例子是:
Project Jan-2009 Feb-2009 Mar-2009 Apr-2009... Dec-2009 Jan-2010
-------------- ------------ ------------ ------------ ----------- ------------ ---------
11-11079 466.00 0.00 0.00 0.00 0.00 855.00
01-11052 56131.00 0.00 36962.00 -61596.00 2428.00 0.00
我阅读了许多示例,其中每个条目的日期都填充在一列中,但我没有发现任何情况下月份是列名而年份在行中。
带有数据透视表的动态 SQL?
或者使用 SQL、临时表、连接和联合进行一些相当广泛的操作?
对使用 SSIS 数据透视表功能有何想法?
【问题讨论】:
-
请不要在标题或您的问题中使用术语“MS SQL”。没有这样的产品。使用它会使搜索难以找到您的问题,并混淆 SQL Server 和 MySQL。
-
嘿 - 我忽略了我知道答案的 tsql 问题,因为我将 MSSQL 读为 MySQL
-
John - 这些名字很接近且令人困惑,但为了公平起见,Microsoft SQL Server 以某种方式称为 MSSQL。看看二进制文件的路径:-) C:\Program Files\Microsoft SQL Server\MSSQL10.TEST2008\MSSQL 或 PowerShell > Get-Service,它产生 MSSQL$TEST2008 作为服务的名称,至少对我来说.
-
@onupdatecascade:文件夹名称不等同于产品名称。我也没有责备他们或任何东西 - 我正在解释为什么不在 SO 上使用该术语。
-
我认为如果有什么你可以争辩的,
SQL Server是 真的 sql 服务器 的糟糕名称 - 不管它可能是恰当的。MSSQL肯定更具描述性,并且会排除其他内容(例如此消歧页面上列出的内容:en.wikipedia.org/wiki/SQL_Server)。更不用说它有这种傲慢的权威声音,这并不能很好地代表产品或竞争对手的替代品。
标签: sql sql-server sql-server-2005 tsql ssis