【sql行列转换】这一条怎么该怎么写?
时间:2011-12-05
来源:互联网
SQL code
if exists (select * from sysobjects where id = OBJECT_ID('[test]') and OBJECTPROPERTY(id, 'IsUserTable') = 1) DROP TABLE [test] CREATE TABLE [test] ( [自增id] [int] IDENTITY (1, 1) NOT NULL, [姓名] [varchar] (50) NULL, [日期] [datetime] NULL, [是否准时] [varchar] (50) NULL, [上班下班] [varchar] (50) NULL) SET IDENTITY_INSERT [test] ON INSERT [test] ([自增id],[姓名],[日期],[是否准时],[上班下班]) VALUES ( 1,N'张三',N'2011-10-01 00:00:00',N'1',N'上班') INSERT [test] ([自增id],[姓名],[日期],[是否准时],[上班下班]) VALUES ( 2,N'张三',N'2011-10-01 00:00:00',N'1',N'下班') INSERT [test] ([自增id],[姓名],[日期],[是否准时],[上班下班]) VALUES ( 3,N'李四',N'2011-10-01 00:00:00',N'1',N'上班') INSERT [test] ([自增id],[姓名],[日期],[是否准时],[上班下班]) VALUES ( 4,N'李四',N'2011-10-01 00:00:00',N'0',N'下班') INSERT [test] ([自增id],[姓名],[日期],[是否准时],[上班下班]) VALUES ( 5,N'张三',N'2011-10-02 00:00:00',N'0',N'上班') INSERT [test] ([自增id],[姓名],[日期],[是否准时],[上班下班]) VALUES ( 6,N'张三',N'2011-10-02 00:00:00',N'1',N'下班') INSERT [test] ([自增id],[姓名],[日期],[是否准时],[上班下班]) VALUES ( 7,N'李四',N'2011-10-02 00:00:00',N'1',N'上班') SET IDENTITY_INSERT [test] OFF 自增id 姓名 日期 是否准时 上班下班 1 张三 2011-10-01 00:00:00.000 1 上班 2 张三 2011-10-01 00:00:00.000 1 下班 3 李四 2011-10-01 00:00:00.000 1 上班 4 李四 2011-10-01 00:00:00.000 0 下班 5 张三 2011-10-02 00:00:00.000 0 上班 6 张三 2011-10-02 00:00:00.000 1 下班 7 李四 2011-10-02 00:00:00.000 1 上班 ----------------------------------------------------------- 提示 “1” 表示 考勤 “0” 表示 未考勤(迟到或者 早退 ) 每人每天应有两条考勤记录,若无就为未登记。 获取下表 ---------------------------------------------------------- 姓名 2011-10-1 2011-10-02 张三 正常考勤 迟到 张三 正常考勤 正常考勤 李四 正常考勤 正常考勤 李四 早退 未登记 ------------------- 如何 通过一条sql 语句 实现,sql语句实在无法实现用存储过程也可以。
作者: chz415767975 发布时间: 2011-12-05
动态行转列.
作者: qianjin036a 发布时间: 2011-12-05
SQL code
declare @sql varchar(8000) set @sql = 'select [姓名],[上班下班]' select @sql = @sql + ' , max(case convert(varchar(10),[日期],120) when ''' + convert(varchar(10),[日期],120)+ ''' then case when [是否准时]=1 then ''正常考勤'' when [是否准时]=0 and [上班下班]=''上班'' then ''迟到'' when [是否准时]=0 and [上班下班]=''下班'' then ''早退'' end else ''weidengji'' end) [' + convert(varchar(10),[日期],120)+ ']' from (select distinct [日期] from [test]) as a set @sql = @sql + ' from [test] group by [姓名],[上班下班] order by 1 desc' exec(@sql)
作者: maco_wang 发布时间: 2011-12-05
做好通过程序处理,自动拼接的sql语句,很容易超过8000
作者: koumingjie 发布时间: 2011-12-05
SQL code
CREATE TABLE [test] ( [自增id] [int] IDENTITY (1, 1) NOT NULL, [姓名] [varchar] (50) NULL, [日期] [datetime] NULL, [是否准时] [varchar] (50) NULL, [上班下班] [varchar] (50) NULL) SET IDENTITY_INSERT [test] ON INSERT [test] ([自增id],[姓名],[日期],[是否准时],[上班下班]) VALUES ( 1,N'张三',N'2011-10-01 00:00:00',N'1',N'上班') INSERT [test] ([自增id],[姓名],[日期],[是否准时],[上班下班]) VALUES ( 2,N'张三',N'2011-10-01 00:00:00',N'1',N'下班') INSERT [test] ([自增id],[姓名],[日期],[是否准时],[上班下班]) VALUES ( 3,N'李四',N'2011-10-01 00:00:00',N'1',N'上班') INSERT [test] ([自增id],[姓名],[日期],[是否准时],[上班下班]) VALUES ( 4,N'李四',N'2011-10-01 00:00:00',N'0',N'下班') INSERT [test] ([自增id],[姓名],[日期],[是否准时],[上班下班]) VALUES ( 5,N'张三',N'2011-10-02 00:00:00',N'0',N'上班') INSERT [test] ([自增id],[姓名],[日期],[是否准时],[上班下班]) VALUES ( 6,N'张三',N'2011-10-02 00:00:00',N'1',N'下班') INSERT [test] ([自增id],[姓名],[日期],[是否准时],[上班下班]) VALUES ( 7,N'李四',N'2011-10-02 00:00:00',N'1',N'上班') go select c.姓名,convert(varchar(10),c.日期,120)日期,c.上班下班, (case when d.是否准时=1 then '正常考勤' when d.是否准时=0 and c.上班下班='上班' then '迟到' when d.是否准时=0 and c.上班下班='下班' then '早退' else '未登记' end) 状态 into #t from( select a.姓名,b.日期,b.上班下班 from (select distinct 姓名 from test)a, (select distinct 日期,上班下班 from test)b )c left join test d on c.姓名=d.姓名 and c.日期=d.日期 and c.上班下班=d.上班下班 declare @sql nvarchar(4000) set @sql='' Select @sql=@sql+','+quotename(日期)+'=max(case when 日期='''+日期+''' then 状态 else '''' end)' from #t where 上班下班='上班' group by 日期 exec('select 姓名 '+@sql+' from #t where 上班下班=''上班'' group by 姓名 union all select 姓名 '+@sql+' from #t where 上班下班=''下班'' group by 姓名 order by 1,2 desc') /* 姓名 2011-10-01 2011-10-02 -------------------------------------------------- ---------- ---------- 李四 正常考勤 正常考勤 李四 早退 未登记 张三 正常考勤 迟到 张三 正常考勤 正常考勤 (4 行受影响) */ go drop table test,#t
作者: qianjin036a 发布时间: 2011-12-05
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28