可以有两种写法,一种可以写的很灵活,另一种则写死,如下表结构:
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.youkuaiyun.com/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
本文介绍两种SQL查询方法,用于根据车辆的状态(如出发、返回)进行分组查询,并展示如何获取每辆车最后一次‘出发’及‘返回’的时间。
2039

被折叠的 条评论
为什么被折叠?



