太难了,求个SQL

xmj7571436 2014-06-17 07:16:51


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 高等数学


...全文
121 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
xmj7571436 2014-06-18
  • 打赏
  • 举报
回复
引用 2 楼 DBA_Huangzj 的回复:
去研究一下吧http://www.cnblogs.com/gaizai/p/3753296.html
谢谢。 答案如下:

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
發糞塗牆 2014-06-18
  • 打赏
  • 举报
回复
--小F-- 2014-06-17
  • 打赏
  • 举报
回复
动态行列转换 论坛实在是太多了

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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