首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

SQL 行转列如何实现

2013-03-13 
SQL 行转列怎么实现?假设有张学生排名表(tb)如下:学期专业课程姓名第一学期 计算机系 语文张德第一学期 计

SQL 行转列怎么实现?

假设有张学生排名表(tb)如下:

学期       专业   课程  姓名
第一学期 计算机系 语文  张德
第一学期 计算机系 语文  张三
第一学期 计算机系 数学  李四
第一学期 计算机系 电脑  刘海

第一学期 英语系   语文  张阐
第一学期 英语系   数学  陈明

第一学期 工程系   物理  李王
第一学期 工程系   数学  莉丽

/*
想变成 
姓名           计算机系        英语系    工程系          
----------   ----------- ----------- ----------- 
第一学期  语文   张德       张阐          
第一学期  语文   张三                 
第一学期  数学   李四       陈明         莉丽       
第一学期  电脑   刘海                 
第一学期  物理                           李王

*/


[解决办法]
查看置顶贴就明白了
[解决办法]

引用:
查看置顶贴就明白了


就是这里http://bbs.csdn.net/topics/390035109
[解决办法]
IF OBJECT_ID('TEST')IS NOT NULL
  DROP TABLE TEST
GO

CREATE TABLE TEST(学期 VARCHAR(10),专业 VARCHAR(10),课程 VARCHAR(10),姓名 VARCHAR(10))
INSERT INTO TEST
SELECT '第一学期', '计算机系', '语文', '张德' UNION ALL
SELECT'第一学期', '计算机系' ,'语文' , '张三'UNION ALL
SELECT'第一学期' ,'计算机系' ,'数学' , '李四'UNION ALL
SELECT'第一学期' ,'计算机系', '电脑' , '刘海'UNION ALL

SELECT'第一学期' ,'英语系' ,  '语文' , '张阐'UNION ALL
SELECT'第一学期' ,'英语系' ,  '数学',  '陈明'UNION ALL

SELECT'第一学期', '工程系'   ,'物理'  ,'李王'UNION ALL
SELECT'第一学期' ,'工程系'  , '数学' , '莉丽'

SELECT
A.学期,A.课程,B.姓名 AS '计算机系',C.姓名 AS '英语系',D.姓名 AS '工程系'

FROM( SELECT DISTINCT 学期,课程 FROM TEST) A
LEFT JOIN TEST B ON A.课程  = B.课程 AND B.专业 = '计算机系'
LEFT JOIN TEST C ON A.课程  = C.课程 AND C.专业 = '英语系'
LEFT JOIN TEST D ON A.课程  = D.课程 AND D.专业 = '工程系'


/*
学期         课程         计算机系       英语系        工程系
---------- ---------- ---------- ---------- ----------
第一学期       电脑         刘海         NULL       NULL


第一学期       数学         李四         陈明         莉丽
第一学期       物理         NULL       NULL       李王
第一学期       语文         张德         张阐         NULL
第一学期       语文         张三         张阐         NULL
*/
--这样会有两个张阐 这个你看行不行吧 。你这个不是行转列


[解决办法]


declare @sql nvarchar(max)
select @sql=isnull(@sql,'')+',max(case when 专业='''+专业+''' then 姓名 else null end)['+专业+']' from (select distinct 专业 from tb)t 
exec('select 学期,课程'+@sql+' from tb group by 学期,课程')

热点排行