http://topic.csdn.net/u/20110706/10/36fe794a-b528-48d5-9474-9783f37f2dba.html
这个帖子里的问题
SELECT tmp1.str1, tmp2.str2 FROM master.dbo.spt_values LEFT JOIN (SELECT DISTINCT dense_rank() OVER (ORDER BY str1) AS expr1, str1 FROM tb) AS tmp1 ON tmp1.expr1 = master.dbo.spt_values.number LEFT JOIN (SELECT DISTINCT dense_rank() OVER (ORDER BY str2) AS expr2, str2 FROM tb) AS tmp2 ON tmp2.expr2 = master.dbo.spt_values.number WHERE master.dbo.spt_values.type = 'p' AND master.dbo.spt_values.number <= 5
master.dbo.spt_values这张表里有从1到2048,type为P的整数
dense_rank() 表示浓度排名,意思是相同的值在排名中只占一个位次,有两人并列第二名,不会造成第三名顺延成第四名
master.dbo.spt_values.number <= 5这句是为了不让多余的null 占用空间
最后把tb表放上: