例子 :
表1
工号 日期 时间
00000523 2007-10-12 17:31:49
00000523 2007-10-12 13:52:32
00000523 2007-10-12 12:12:32
00000523 2007-10-12 07:52:32
表2
工号 日期 时间1 时间2 时间3 时间4
00000523 2007-10-12 07:52:32 12:12:32 13:52:32 17:31:49
首先表1是已经存在的表,其中如果是 按日期查询有4行数据
我现在想做的也就是把表1的4行用1行数据来显示 (如表2所示)
谢谢各位!
表1
工号 日期 时间
00000523 2007-10-12 17:31:49
00000523 2007-10-12 13:52:32
00000523 2007-10-12 12:12:32
00000523 2007-10-12 07:52:32
表2
工号 日期 时间1 时间2 时间3 时间4
00000523 2007-10-12 07:52:32 12:12:32 13:52:32 17:31:49
首先表1是已经存在的表,其中如果是 按日期查询有4行数据
我现在想做的也就是把表1的4行用1行数据来显示 (如表2所示)
谢谢各位!
解决方案 »
- sql server 2008如何自动格式化sql语句?
- 发布与订阅问题
- 关于一个SQL排序问题
- 安装SQL数据库时提示下列错误,请教!
- Windows 8 安装SQLManagementStudio_x86_CHS 提示不兼容,完全无法继续!
- 服务器端为sqlserver2000,是在服务器端装sqldmo,还是在客户端装啊,客户端win98才能引用?
- 请问朋友:SQL Server 2000数据库能打开(或附加)用SQL Server 2005编写的源数据文件吗?!
- 求一个SQL 语句,在线等待...
- 急!!!!我安装完Sql server 7.0 后,怎么在我的菜单栏下没有“sql servive manager”选项阿?
- 存数过程中调用触发器,急啊!!!
- 求sql语句 查询问题
- 写代码的规范就是,关键字全部大写,表名则要小写,可是频频更换大小写,太麻烦了.所以问问大家,有窍门吗?
select *,px=(select count(1) from ta where a.工号 = 工号 and a.日期=日期 and 时间< a.时间)
into tmp
from ta a
select @s = Isnull(@s+',','') +'[时间'+ltrim(px)+'] = max(case when px = '+ltrim(px) + ' then 时间 else null end)'
from tmp
exec('select 工号 ,日期,'+ @s+ ' from tmp group by 工号 ,日期')
INSERT tb SELECT '12770006 ',1,1,1.34
UNION ALL SELECT '12770006 ',1,2,046
UNION ALL SELECT '12770006 ',1,3,9.82
UNION ALL SELECT '14061916 ',2,1,5.5
UNION ALL SELECT '14061916 ',2,2,4.36
UNION ALL SELECT '12770006 ',2,1,6.43
UNION ALL SELECT '12770006 ',2,2,0.12
UNION ALL SELECT '12770006 ',2,3,6.37
UNION ALL SELECT '14061916 ',3,1,3.4
UNION ALL SELECT '14061916 ',3,2,1.1 --查询处理
DECLARE @s nvarchar(4000)
--交叉报表处理代码头
SET @s= 'SELECT sn,process_id '
--生成列记录水平显示的处理代码拼接(处理Item列)
SELECT @s=@s
+ ', '+QUOTENAME(data_id)
+N'=SUM(CASE data_id WHEN '+QUOTENAME(data_id,N'''')
+N' THEN measuredata END) '
FROM tb
GROUP BY data_id --拼接交叉报表处理尾部,并且执行拼接后的动态SQL语句
EXEC(@s+N'
FROM tb
GROUP BY sn,process_id ')drop table tb
--drop table tmp
CREATE taBLE tb(工号 varchar(20),日期 int ,时间 int)
INSERT tb SELECT '12770006 ',1 , 2
UNION ALL SELECT '12770006 ',1 , 4
UNION ALL SELECT '12770006 ',1 , 4
UNION ALL SELECT '14061916 ',2 , 5
UNION ALL SELECT '14061916 ',2 , 6
UNION ALL SELECT '12770006 ',2 ,3
UNION ALL SELECT '12770006 ',2 ,4
UNION ALL SELECT '12770006 ',3 , 5
UNION ALL SELECT '14061916 ',3 , 7
UNION ALL SELECT '14061916 ',3 , 8--查询处理
declare @s varchar(8000)
select *,data_id=(select count(1) from tb where a.工号 = 工号 and a.日期=日期 and 时间< a.时间)
into tmp
from tb aselect * from tmp--查询处理
--DECLARE @s nvarchar(4000)
--交叉报表处理代码头
SET @s= 'SELECT 工号,日期 '
--生成列记录水平显示的处理代码拼接(处理Item列)
SELECT @s=@s
+ ', '+QUOTENAME(data_id)
+N'=SUM(CASE data_id WHEN '+QUOTENAME(data_id,N'''')
+N' THEN 时间 END) '
FROM tmp
GROUP BY data_id --拼接交叉报表处理尾部,并且执行拼接后的动态SQL语句
EXEC(@s+N'
FROM tmp
GROUP BY 工号,日期 ')