求一个行列转换的SQL 100分送上了。

我纯洁全身都纯洁 2014-01-15 07:24:59
数据库的数据是这样的

我想得到这样的结果

就是说原来的是每个人每天有多次时间签到 次数可能不同
我想得到的结果是把每个人的一天的签到时间放在一行上 然后按图排序
统计的是一个月的记录 不跨月
...全文
151 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
0逍遥子0 2014-01-16
  • 打赏
  • 举报
回复
53678394
LongRui888 2014-01-16
  • 打赏
  • 举报
回复
引用 10 楼 u013456456 的回复:
[quote=引用 8 楼 yupeigu 的回复:] [quote=引用 7 楼 u013456456 的回复:] [quote=引用 5 楼 yupeigu 的回复:] [quote=引用 2 楼 hjgzj 的回复:] 有木有人帮帮我撒。。看我这么可怜。。
试试这个:

declare @sql nvarchar(max);  
  
set @sql = ''; 

;with t
as
(
select *,
       ROW_NUMBER() over(partition by 日期 order by getdate()) as rownum
from tb
)

select @sql = @sql + 
       ',max(case when rownum = '+cast(rownum as varchar)+
       ' then 时间 else null end) as ['+cast(rownum as varchar)+']' 
from t
group by rownum


set @sql =  'select 部门,编号,姓名,登记号码,日期' +@sql
			'from 
			(
			select *,
				   ROW_NUMBER() over(partition by 日期 order by getdate()) as rownum
			from tb
			)t
			group by 部门,编号,姓名,登记号码,日期'


exec(@sql)
[/quote] 消息 102,级别15,状态1,第21行 'from ( select *, ROW_NUMBER() over(partition by 日期 order by getdate()) as rownum ' 附近有语法错误[/quote] 你用的sql 2000把[/quote] 不是,用的sql2008[/quote] 有qq不,方便的话,帮你看看
0逍遥子0 2014-01-16
  • 打赏
  • 举报
回复
引用 8 楼 yupeigu 的回复:
[quote=引用 7 楼 u013456456 的回复:] [quote=引用 5 楼 yupeigu 的回复:] [quote=引用 2 楼 hjgzj 的回复:] 有木有人帮帮我撒。。看我这么可怜。。
试试这个:

declare @sql nvarchar(max);  
  
set @sql = ''; 

;with t
as
(
select *,
       ROW_NUMBER() over(partition by 日期 order by getdate()) as rownum
from tb
)

select @sql = @sql + 
       ',max(case when rownum = '+cast(rownum as varchar)+
       ' then 时间 else null end) as ['+cast(rownum as varchar)+']' 
from t
group by rownum


set @sql =  'select 部门,编号,姓名,登记号码,日期' +@sql
			'from 
			(
			select *,
				   ROW_NUMBER() over(partition by 日期 order by getdate()) as rownum
			from tb
			)t
			group by 部门,编号,姓名,登记号码,日期'


exec(@sql)
[/quote] 消息 102,级别15,状态1,第21行 'from ( select *, ROW_NUMBER() over(partition by 日期 order by getdate()) as rownum ' 附近有语法错误[/quote] 你用的sql 2000把[/quote] 不是,用的sql2008
發糞塗牆 2014-01-16
  • 打赏
  • 举报
回复
引用 7 楼 u013456456 的回复:
[quote=引用 5 楼 yupeigu 的回复:] [quote=引用 2 楼 hjgzj 的回复:] 有木有人帮帮我撒。。看我这么可怜。。
试试这个:

declare @sql nvarchar(max);  
  
set @sql = ''; 

;with t
as
(
select *,
       ROW_NUMBER() over(partition by 日期 order by getdate()) as rownum
from tb
)

select @sql = @sql + 
       ',max(case when rownum = '+cast(rownum as varchar)+
       ' then 时间 else null end) as ['+cast(rownum as varchar)+']' 
from t
group by rownum


set @sql =  'select 部门,编号,姓名,登记号码,日期' +@sql
			'from 
			(
			select *,
				   ROW_NUMBER() over(partition by 日期 order by getdate()) as rownum
			from tb
			)t
			group by 部门,编号,姓名,登记号码,日期'


exec(@sql)
[/quote] 消息 102,级别15,状态1,第21行 'from ( select *, ROW_NUMBER() over(partition by 日期 order by getdate()) as rownum ' 附近有语法错误[/quote]你的是2000?
LongRui888 2014-01-16
  • 打赏
  • 举报
回复
引用 7 楼 u013456456 的回复:
[quote=引用 5 楼 yupeigu 的回复:] [quote=引用 2 楼 hjgzj 的回复:] 有木有人帮帮我撒。。看我这么可怜。。
试试这个:

declare @sql nvarchar(max);  
  
set @sql = ''; 

;with t
as
(
select *,
       ROW_NUMBER() over(partition by 日期 order by getdate()) as rownum
from tb
)

select @sql = @sql + 
       ',max(case when rownum = '+cast(rownum as varchar)+
       ' then 时间 else null end) as ['+cast(rownum as varchar)+']' 
from t
group by rownum


set @sql =  'select 部门,编号,姓名,登记号码,日期' +@sql
			'from 
			(
			select *,
				   ROW_NUMBER() over(partition by 日期 order by getdate()) as rownum
			from tb
			)t
			group by 部门,编号,姓名,登记号码,日期'


exec(@sql)
[/quote] 消息 102,级别15,状态1,第21行 'from ( select *, ROW_NUMBER() over(partition by 日期 order by getdate()) as rownum ' 附近有语法错误[/quote] 你用的sql 2000把
0逍遥子0 2014-01-16
  • 打赏
  • 举报
回复
引用 5 楼 yupeigu 的回复:
[quote=引用 2 楼 hjgzj 的回复:] 有木有人帮帮我撒。。看我这么可怜。。
试试这个:

declare @sql nvarchar(max);  
  
set @sql = ''; 

;with t
as
(
select *,
       ROW_NUMBER() over(partition by 日期 order by getdate()) as rownum
from tb
)

select @sql = @sql + 
       ',max(case when rownum = '+cast(rownum as varchar)+
       ' then 时间 else null end) as ['+cast(rownum as varchar)+']' 
from t
group by rownum


set @sql =  'select 部门,编号,姓名,登记号码,日期' +@sql
			'from 
			(
			select *,
				   ROW_NUMBER() over(partition by 日期 order by getdate()) as rownum
			from tb
			)t
			group by 部门,编号,姓名,登记号码,日期'


exec(@sql)
[/quote] 消息 102,级别15,状态1,第21行 'from ( select *, ROW_NUMBER() over(partition by 日期 order by getdate()) as rownum ' 附近有语法错误
LongRui888 2014-01-15
  • 打赏
  • 举报
回复
你有建表的语句,和插入数据的语句不,贴出来。 上面的代码应该可以,你试试
LongRui888 2014-01-15
  • 打赏
  • 举报
回复
引用 2 楼 hjgzj 的回复:
有木有人帮帮我撒。。看我这么可怜。。
试试这个:

declare @sql nvarchar(max);  
  
set @sql = ''; 

;with t
as
(
select *,
       ROW_NUMBER() over(partition by 日期 order by getdate()) as rownum
from tb
)

select @sql = @sql + 
       ',max(case when rownum = '+cast(rownum as varchar)+
       ' then 时间 else null end) as ['+cast(rownum as varchar)+']' 
from t
group by rownum


set @sql =  'select 部门,编号,姓名,登记号码,日期' +@sql
			'from 
			(
			select *,
				   ROW_NUMBER() over(partition by 日期 order by getdate()) as rownum
			from tb
			)t
			group by 部门,编号,姓名,登记号码,日期'


exec(@sql)
  • 打赏
  • 举报
回复
引用 3 楼 t101lian 的回复:
帮顶。。。。
帮顶是什么节奏。。
  • 打赏
  • 举报
回复
有木有人帮帮我撒。。看我这么可怜。。
  • 打赏
  • 举报
回复
第二张图有点小 我再发下

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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