现有如下
idx tdate
1 2012-03-29 07:37:00.000
1 2012-03-29 09:37:00.000
2 2012-03-29 12:01:00.000
2 2012-03-29 14:25:00.000
2 2012-03-29 17:19:00.000
2 2012-03-29 20:03:00.000
2 2012-03-29 23:29:00.000
3 2012-03-29 07:40:00.000
3 2012-03-29 09:43:00.000
4 2012-03-29 12:04:00.000
4 2012-03-29 14:31:00.000
4 2012-03-29 17:25:00.000
4 2012-03-29 20:09:00.000
需要开成如下表格
idx 第一次 第二次 第三次 。。。共七次
1 2012-03-29 07:37 2012-03-29 09:37
2 2012-03-29 12:01 2012-03-29 14:25 2012-03-29 17:19
。。。
该如何写啊
这个是一个行转列的问题,参考:http://www.cnblogs.com/emmy/archive/2011/11/24/2261893.html,当然这样的例子很多,你在园子里搜索下“SQL行转列”
上面讲行转列的例子我也看过了,不过那些都是固定行名,所以好转,而这个是日期,并且不固定
@yht212: 你可以做个变通:比如,给你的数据表增加一个字段,用于写第几次之类的。
@笨笨蜗牛: 谢谢,后来我也想到这个方法了,已经解决,再次感谢
关注。。。
哎呀,希望是Sql Server 2005 以上了
--Sql 2005以上 with ordered_data as (select *, row_number() over (partition by idx order by tdate) as norder from <tablename>) --下面对就可以对ordered_data应用行转列了...省略, 参考我前一个回答
CREATE TABLE RowToColum ( idx INT, tdate DATETIME, ) go INSERT INTO RowToColum SELECT '1', '2012-03-29 07:37:00.000' UNION SELECT '1', '2012-03-29 09:37:00.000' UNION SELECT '2', '2012-03-29 12:01:00.000' UNION SELECT '2', '2012-03-29 14:25:00.000' UNION SELECT '2', '2012-03-29 17:19:00.000' UNION SELECT '2', '2012-03-29 20:03:00.000' UNION SELECT '2', '2012-03-29 23:29:00.000' UNION SELECT '3', '2012-03-29 07:40:00.000' UNION SELECT '3', '2012-03-29 09:43:00.000' UNION SELECT '4', '2012-03-29 12:04:00.000' UNION SELECT '4', '2012-03-29 14:31:00.000' UNION SELECT '4', '2012-03-29 17:25:00.000' UNION SELECT '4', '2012-03-29 20:09:00.000' go SELECT *, Row_number() OVER (partition BY idx ORDER BY tdate) AS rowno INTO #cte FROM RowToColum DECLARE @sql VARCHAR(max) SELECT @sql = '' SELECT @sql = @sql + '[' + Cast(number AS VARCHAR(20)) + '],' FROM master..spt_values WHERE type = 'p' AND number > 0 AND number <= (SELECT Max(rowno) FROM #cte) SELECT @sql = LEFT(@sql, Len(@sql) - 1) SET @sql=' SELECT idx, ' + @sql + ' FROM #Cte PIVOT ( max (tdate) FOR rowno IN ( ' + @sql + ' ) ) AS pvt' EXEC (@sql)