日期:2014-05-17  浏览次数:20524 次

请教高手一个sql的问题,紧急!!
数据表
n_id    number     s_id
1       0099888     1
2       0098393     2
3 9038323     1
4       2345476     1
5 3257657     3
6 3223232     2

需要的结果

s_id     number1       number2     number3
1     0099888           9038323   2345476
2     0098393           3223232     null
3     3257657           null        null
4     nul               null   null

请教高手,这个Sql语句该怎么写?
在SQL server 2000里用的,没有开窗函数
SQL 转置

------解决方案--------------------
你搜索一下行列转换。这是百度上一个解决的很好的问题。
http://zhidao.baidu.com/question/570840293.html?quesup2&oldq=1
------解决方案--------------------
SELECT
s_id, 
number1 = MAX(CASE rowid WHEN 1 THEN number END),
number2 = MAX(CASE rowid WHEN 2 THEN number END),
number3 = MAX(CASE rowid WHEN 3 THEN number END)
FROM 
(
SELECT rowid = (SELECT COUNT(*) FROM TB b WHERE b.s_id=a.s_id and b.n_id <= a.n_id), * FROM TB a
) t
GROUP BY s_id
ORDER BY s_id