读书人

【SQL SERVER 2005+版本行转列示例】(

发布时间: 2013-01-27 13:56:17 作者: rapoo

【SQL SERVER 2005+版本行转列示例】(2012年1-8月水源党25强榜单新鲜出炉)
在CSDN社区 MS-SQLSERVER板块,关于行转列的问题,层出不穷,之前dawugui,roy_88等高手都多次整理过,我就不再整理了,只是给出一个示例,以供大家参考。

党是CSDN水源2012年新出现的,这里对2012年1-8月的相关数据,简单的统计一下。

数据采集于下面地址:
http://forum.csdn.net/PointForum/Forum/ExpertTopList.aspx?flg=bigMonth&forumid=d5ce81ef-7dab-4abb-a7ca-ac03342ae03b&bigclassid=d5ce81ef-7dab-4abb-a7ca-ac03342ae03b&smallclassid=9231e8e0-b9bc-4c51-b364-ba68665814cc&date=2012-6&year=2012&month=6

统计只是在扩充话题板块TOP100名单中出现的用户,以昵称中出现党字样的为样本。

数据显示党在2012年1-8月期间,TOP100中有的相关数据共得216951分。

详见榜单:
【SQL SERVER 2005+版本行转列示例】(2012年1-8月水源党25强榜单新鲜出炉),该如何解决

其中的总得分是2012年1-8年期间,出现在月TOP100中的分数的和,并不是个人总数。

非官方统计,如果数据有错误望见谅。

数据脚本我已经上传到了下载频道,感兴趣的朋友,可以去免费下载。
地址: 相关数据脚本下载地址(含创建表的脚本和插入数据的脚本,无需积分)

行转列代码如下:


支持
[解决办法]
【SQL SERVER 2005+版本行转列示例】(2012年1-8月水源党25强榜单新鲜出炉),该如何解决
继续支持
[解决办法]
【SQL SERVER 2005+版本行转列示例】(2012年1-8月水源党25强榜单新鲜出炉),该如何解决干嘛发到非技术区嘛
------解决方案--------------------


【SQL SERVER 2005+版本行转列示例】(2012年1-8月水源党25强榜单新鲜出炉),该如何解决
[解决办法]
我举三只手支持,假如有人借我个,呵呵。。。
[解决办法]
好贴,顶一个!
[解决办法]
支持一下【SQL SERVER 2005+版本行转列示例】(2012年1-8月水源党25强榜单新鲜出炉),该如何解决
[解决办法]
haoyehaoye
[解决办法]
感谢楼主分享!
[解决办法]
强烈支持啊!
【SQL SERVER 2005+版本行转列示例】(2012年1-8月水源党25强榜单新鲜出炉),该如何解决
[解决办法]


[解决办法]
我只是改变了这里,其他逻辑不变,改成CET只是为了便于整理

select @colname=
isnull(@colname+',','')+'max(isnull(''第''+ltrim(['
+ltrim([month])+'])+''名(''+ltrim(score)+''分)'','''')) as ['+ltrim([month])+'月]'
from dduser group by [month]


[解决办法]
引用:
引用:

干嘛发到非技术区嘛

有道理,转到技术区,追问一个技术问题

如果想要下面的结果,有什么好办法吗?貌似pivot后面不能写两个聚合函数。

我整了一个,你试试

select
row_number() over (order by
(select sum(score) from dduser
where username=b.username) desc) as 总排名,


(select sum(score) from dduser where username=b.username) as 总得分,
userDisplay as 昵称,
username as 账号,
isnull(max([1]),'') as [1月],
isnull(max([2]),'') as [2月],
isnull(max([3]),'') as [3月],
isnull(max([4]),'') as [4月],
isnull(max([5]),'') as [5月],
isnull(max([6]),'') as [6月],
isnull(max([7]),'') as [7月],
isnull(max([8]),'') as [8月]
from
(select *,N'第'+ltrim(rank)+N'名('+ltrim(score)+')' rank2 from dduser) a
pivot (max(rank2) for [month] in ([1],[2],[3],[4],[5],[6],[7],[8])) b
group by username,userDisplay order by 总得分 desc


[解决办法]
技术牛人
[解决办法]
支持一下
[解决办法]
支持一下叶子【SQL SERVER 2005+版本行转列示例】(2012年1-8月水源党25强榜单新鲜出炉),该如何解决
[解决办法]
楼主漂亮....【SQL SERVER 2005+版本行转列示例】(2012年1-8月水源党25强榜单新鲜出炉),该如何解决
[解决办法]
厉害啊,这数据怎么得到的啊。
[解决办法]
值得学习,收藏了
[解决办法]
厉害啊
值得学习,收藏了
同问,数据是怎么得到的
[解决办法]
留个位置~

读书人网 >SQL Server

热点推荐