我现在的数据是这样的:
日期 编号 星期 内容
2009/01/01 0001 星期一 9:00 开会
2009/01/02 0001 星期二 10:00 杀人
2009/01/03 0001 星期三 9:00 开会
2009/01/04 0001 星期四 10:00 杀人
2009/01/05 0001 星期五 9:00 开会
2009/01/01 0002 星期一 10:00 杀人
2009/01/02 0002 星期二 9:00 开会
2009/01/03 0002 星期三 10:00 杀人
2009/01/04 0002 星期四 9:00 开会
2009/01/05 0002 星期五 10:00 杀人我想要的结果是:
编号 星期一 星期二 星期三 星期四 星期五 星期六 星期天
0001 9:00 开会 10:00 杀人 9:00 开会 10:00 杀人 9:00 开会
0002 10:00 杀人 9:00 开会 10:00 杀人 9:00 开会 10:00 杀人
备注:
1. 日期和编号是主键.
2. 网上行转列的问题我也有试过,达不到我想要的效果
3. 望求高人,速结
日期 编号 星期 内容
2009/01/01 0001 星期一 9:00 开会
2009/01/02 0001 星期二 10:00 杀人
2009/01/03 0001 星期三 9:00 开会
2009/01/04 0001 星期四 10:00 杀人
2009/01/05 0001 星期五 9:00 开会
2009/01/01 0002 星期一 10:00 杀人
2009/01/02 0002 星期二 9:00 开会
2009/01/03 0002 星期三 10:00 杀人
2009/01/04 0002 星期四 9:00 开会
2009/01/05 0002 星期五 10:00 杀人我想要的结果是:
编号 星期一 星期二 星期三 星期四 星期五 星期六 星期天
0001 9:00 开会 10:00 杀人 9:00 开会 10:00 杀人 9:00 开会
0002 10:00 杀人 9:00 开会 10:00 杀人 9:00 开会 10:00 杀人
备注:
1. 日期和编号是主键.
2. 网上行转列的问题我也有试过,达不到我想要的效果
3. 望求高人,速结
if object_id('tb')is not null drop table tb
go
create table tb(日期 datetime,编号 varchar(4),星期 varchar(10),内容 varchar(20))
insert tb select
'2009/01/01', '0001', '星期一', '9:00 开会' union all select
'2009/01/02', '0001', '星期二', '10:00 杀人' union all select
'2009/01/03', '0001', '星期三', '9:00 开会' union all select
'2009/01/04', '0001', '星期四', '10:00 杀人' union all select
'2009/01/05', '0001', '星期五', '9:00 开会' union all select
'2009/01/01', '0002', '星期一', '10:00 杀人' union all select
'2009/01/02', '0002', '星期二', '9:00 开会' union all select
'2009/01/03', '0002', '星期三', '10:00 杀人' union all select
'2009/01/04', '0002', '星期四', '9:00 开会' union all select
'2009/01/05' , '0002', '星期五', '10:00 杀人' --select * from tb
declare @s varchar(4000)
select @s=isnull(@s+',','')+'max(case when 星期='''+星期+''' then 内容 else '''' end) ['+星期+']'
from (
select '星期一' as 星期 union all
select '星期二' union all
select '星期三' union all
select '星期四' union all
select '星期五' union all
select '星期六' union all
select '星期日' )tset @s='select 编号,'+@s+' from tb group by 编号'exec(@s)
编号 星期一 星期二 星期三 星期四 星期五 星期六 星期日
---- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- --------------------
0001 9:00 开会 10:00 杀人 9:00 开会 10:00 杀人 9:00 开会
0002 10:00 杀人 9:00 开会 10:00 杀人 9:00 开会 10:00 杀人 (2 行受影响)
都试过,达不到我要的效果,注意,教程中用的是max等函数,我这里都是string
不过还是要谢谢上面这位兄弟
go
create table tb(日期 datetime,编号 varchar(4),星期 varchar(10),内容 varchar(20))
insert tb select
'2009/01/01', '0001', '星期一', '9:00 开会' union all select
'2009/01/02', '0001', '星期二', '10:00 杀人' union all select
'2009/01/03', '0001', '星期三', '9:00 开会' union all select
'2009/01/04', '0001', '星期四', '10:00 杀人' union all select
'2009/01/05', '0001', '星期五', '9:00 开会' union all select
'2009/01/01', '0002', '星期一', '10:00 杀人' union all select
'2009/01/02', '0002', '星期二', '9:00 开会' union all select
'2009/01/03', '0002', '星期三', '10:00 杀人' union all select
'2009/01/04', '0002', '星期四', '9:00 开会' union all select
'2009/01/05' , '0002', '星期五', '10:00 杀人' select
编号,
max(case when 星期='星期一' then 内容 else '' end) [星期一],
max(case when 星期='星期二' then 内容 else '' end) [星期二],
max(case when 星期='星期三' then 内容 else '' end) [星期三],
max(case when 星期='星期四' then 内容 else '' end) [星期四],
max(case when 星期='星期五' then 内容 else '' end) [星期五],
max(case when 星期='星期六' then 内容 else '' end) [星期六],
max(case when 星期='星期日' then 内容 else '' end) [星期日]
from
tb
group by
编号
/*
(10 行受影响)
编号 星期一 星期二 星期三 星期四 星期五 星期六 星期日
---- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- --------------------
0001 9:00 开会 10:00 杀人 9:00 开会 10:00 杀人 9:00 开会
0002 10:00 杀人 9:00 开会 10:00 杀人 9:00 开会 10:00 杀人 (2 行受影响)*/
if object_id('tb') is not null
drop table tb
go
Create Table tb(日期 dateTime,编号 nvarchar(20),星期 nvarchar(20),内容 nvarchar(20))
go
---生成测试数据
insert into tb select
'2009/01/01','0001','星期一','9:00 开会' union all select
'2009/01/02','0001','星期二','10:00 杀人' union all select
'2009/01/03','0001','星期三','9:00 开会' union all select
'2009/01/04','0001','星期四','10:00 杀人' union all select
'2009/01/05','0001','星期五','9:00 开会' union all select
'2009/01/01','0002','星期一','10:00 杀人' union all select
'2009/01/02','0002','星期二','9:00 开会' union all select
'2009/01/03','0002','星期三','10:00 杀人' union all select
'2009/01/04','0002','星期四','9:00 开会' union all select
'2009/01/05','0002','星期五','10:00 杀人'
goselect * from tb
declare @s nvarchar(4000)
set @s=''
Select @s=@s+','+quotename([星期])+'=max(case when [星期]='+quotename([星期],'''')+' then [内容] else null end)'
from tb group by[星期]set @s='select [编号]'+@s+' from tb group by [编号]'exec(@s)
/*
编号 星期二 星期三 星期四 星期五 星期一
-------------------- -------------------- -------------------- -------------------- -------------------- --------------------
0001 10:00 杀人 9:00 开会 10:00 杀人 9:00 开会 9:00 开会
0002 9:00 开会 10:00 杀人 9:00 开会 10:00 杀人 10:00 杀人
*/