假设有张学生排名表(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