可以有两种写法,一种可以写的很灵活,另一种则写死,如下表结构:
car_name date_time state
汽车A 2001-01-01 01:01:01.000 出发
汽车A 2002-08-01 01:01:00.000 返回
汽车B 2001-03-01 01:01:00.000 出发
汽车B 2001-05-01 01:01:00.000 返回
汽车C 2001-06-01 01:00:00.000 出发
汽车D 2001-06-01 01:00:00.000 出发
汽车C 2001-08-01 01:00:00.000 返回
第一种写法:,很灵活,你可以有多种state
-
SQL code
-
注:在这里(select state from car group by state)这是必须的,说明你的想要得到的结果列(结果种类),刚开使我也犯了错误,把表名
-
直接写上了,得到我多个重复的列; declare @m_sql varchar(8000) set @m_sql='select car_name ' select @m_sql=@m_sql+', max(case state when '''+a.state+''' then convert(varchar(10),date_time) else ''0'' end ) as ['+a.state+']' from (select state from car group by state) as a set @m_sql=@m_sql+' from car group by car_name' exec(@m_sql)
第二种写法:这就比较死板了,是固定的,但是很简单:
如下
-
SQL code
-
select car_name , max ( case state when ' 出发 ' then convert ( varchar ( 10 ),date_time) else ' 0 ' end ) as [ 出发 ] , max ( case state when ' 返回 ' then convert ( varchar ( 10 ),date_time) else ' 0 ' end ) as [ 返回 ] from car group by car_name
得到结果如下:结果是一样的:csdn原贴:http://topic.csdn.net/u/20090414/22/f5c80b09-6263-482e-a2a4-471ebc3126a7.html?seed=1730328476
car_name 出发 返回
汽车A 01 1 2001 08 1 2002
汽车B 03 1 2001 05 1 2001
汽车C 06 1 2001 08 1 2001
汽车D 06 1 2001 0