诚恳的请各位大神们进来看看!!!

镜中雨 2011-07-20 02:35:07
有这样一个表
id号 状态号 日期
1 00 20110204
1 01 20110305
1 02 20110406
2 05 20110605
2 01 20110609
。 。 。
。 。 。
。 。 。

我想用一条sql语句使它变成下面的显示结果。
id号 状态号1 日期1 状态号2 日期2
1 01 20110305 02 20110406
2 05 20110605 01 20110609
。 。 。 。 。
。 。 。 。 。
。 。 。 。 。
sql语句是神马写的?
...全文
44 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
AcHerat 2011-07-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 qq1098018229 的回复:]
如果oracle的sql该怎么写?因为语法上会有很多不同

引用 4 楼 acherat 的回复:
SQL code


create table tb(id号 int ,状态号 varchar(2),日期 datetime)
insert tb
select 1 ,'00','20110204' union all
select 1 ,'01','20110305' union……
[/Quote]

这个。。。得问问ORACLE版块的了。
镜中雨 2011-07-20
  • 打赏
  • 举报
回复
如果oracle的sql该怎么写?因为语法上会有很多不同[Quote=引用 4 楼 acherat 的回复:]
SQL code


create table tb(id号 int ,状态号 varchar(2),日期 datetime)
insert tb
select 1 ,'00','20110204' union all
select 1 ,'01','20110305' union all
select 1 ,'02','20110406' union all
select 2 ,……
[/Quote]
AcHerat 2011-07-20
  • 打赏
  • 举报
回复

create table tb(id号 int ,状态号 varchar(2),日期 datetime)
insert tb
select 1 ,'00','20110204' union all
select 1 ,'01','20110305' union all
select 1 ,'02','20110406' union all
select 2 ,'05','20110605' union all
select 2 ,'01','20110609'
--drop table tb
select id号,max(case when id=1 then 状态号 end) as 状态号1,
max(case when id=1 then 日期 end) as 日期1,
max(case when id=2 then 状态号 end) as 状态号2,
max(case when id=2 then 日期 end) as 日期2
from
(select id=row_number() over (partition by id号 order by 日期 desc),* from tb) a
where id <= 2
group by id号

drop table tb

/******************

id号 状态号1 日期1 状态号2 日期2
----------- ---- ----------------------- ---- -----------------------
1 02 2011-04-06 00:00:00.000 01 2011-03-05 00:00:00.000
2 01 2011-06-09 00:00:00.000 05 2011-06-05 00:00:00.000
警告: 聚合或其他 SET 操作消除了空值。

(2 行受影响)
镜中雨 2011-07-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 varchar 的回复:]
只取两个?
[/Quote]
是的,取最近的两个日期
cd731107 2011-07-20
  • 打赏
  • 举报
回复
create table tb(id号 int ,状态号 varchar(2),日期 datetime)
insert tb
select 1 ,'00','20110204' union all
select 1 ,'01','20110305' union all
select 1 ,'02','20110406' union all
select 2 ,'05','20110605' union all
select 2 ,'01','20110609'
--drop table tb
select a.id号,a.状态号 as 状态号1,a.日期 as 日期1,
b.状态号 as 状态号2,b.日期 as 日期2
from
(select id=row_number() over (order by getdate()),* from tb) a,
(select id=row_number() over (order by getdate()),* from tb) b
where a.id号=b.id号 and a.id<b.id
and a.id<>1 and b.id<>1

/*
id号 状态号1 日期1 状态号2 日期2
----------- ---- ----------------------- ---- -----------------------
1 01 2011-03-05 00:00:00.000 02 2011-04-06 00:00:00.000
2 05 2011-06-05 00:00:00.000 01 2011-06-09 00:00:00.000

(2 行受影响)
*/
Varchar 2011-07-20
  • 打赏
  • 举报
回复
只取两个?

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧