22,209
社区成员
发帖
与我相关
我的任务
分享
if object_id('[TB]') is not null drop table [TB]
create table [TB]([StudentCode] varchar(50),[StudentName] varchar(50),[ExamDate] datetime,Code varchar(50),Name varchar(50))
insert into [TB]
select 'zs','张三','2014/6/21 14:00:00','001','高等数学' union all
select 'ls','李四','2014/6/22 14:00:00','002','食品工程' union all
select 'ls','李四','2014/6/22 8:00:00','003','旅游文化' union all
select 'ls','李四','2014/6/21 8:00:00','004','工商管理' union all
select 'zs','张三','2014/6/21 8:00:00','005','合同法' union all
select 'zs','张三','2014/6/22 8:00:00','004','工商管理' union all
select 'zs','张三','2014/6/22 14:00:00','003','旅游文化' union all
select 'ww','王五','2014/6/22 14:00:00','001','高等数学'
-- 动态表头 : 根据日期
学生代号 学生姓名 2014-06-21上午 2014-06-21上午 2014-06-21下午 2014-06-21下午 2014-06-22上午 2014-06-22上午 2014-06-22下午 2014-06-22下午
zs 张三 005 合同法 001 高等数学 004 工商管理 003 旅游文化
ls 李四 004 工商管理 null null 003 旅游文化 002 食品工程
ww 王五 null null null null null null 001 高等数学
DECLARE @sql VARCHAR(8000)
SET @sql = 'SELECT [StudentCode],[StudentName],'
SELECT @sql = @sql + 'MAX(CASE [ExamDate] WHEN '''+CAST([ExamDate] AS nvarchar(128))+''' THEN [Code] ELSE '''' END) AS '''+QUOTENAME(CAST([ExamDate] AS nvarchar(128)))+''',
MAX(CASE [ExamDate] WHEN '''+CAST([ExamDate] AS nvarchar(128))+''' THEN [Name] ELSE '''' END) AS '''+QUOTENAME(CAST([ExamDate] AS nvarchar(128)))+''','
FROM (SELECT DISTINCT [ExamDate] FROM [TB] where [ExamDate]>='2014/6/1 00:00:00' AND [ExamDate]<='2014/7/1 00:00:00') AS A
SELECT @sql = LEFT(@sql,LEN(@sql)-1) + ' FROM [TB] GROUP BY [StudentCode],[StudentName]'
EXEC(@sql)
GO