日期:2014-05-17  浏览次数:20447 次

怎样吧数据格式转换成列
两张表 院系表 department 教师表 teacher
  院系 教师姓名 教师类型 电话号码
  信息学院 张三 系主任 18079240505
  信息学院 李四 书记 18923450505
  信息学 陈明 科长 17890230404


把上面的从数据库里查出的 数据格式变成:


  院系 系主任 系主任电话 书记 书记电话 科长 科长电话
 信息学院 张三 18079240505 李四 18923450505 陈明 17890230404

------解决方案--------------------
SQL code

 CREATE TABLE  department  (Dpt_Id VARCHAR(10), Dpt_Name VARCHAR(10))
 INSERT INTO department 
 SELECT 1,'信息学院'
 --UNION ALL 
 --SELECT 2,'信息学'
 
 CREATE TABLE  teacher  (TeaName VARCHAR(20), Telephone VARCHAR(20), Dpt_Id VARCHAR(20), techer_typ VARCHAR(20))
 INSERT INTO teacher
 SELECT '张三','18079240505',1,'系主任'
 UNION ALL 
 SELECT '李四','18923450505',1,'书记'
 UNION ALL 
 SELECT '陈明','17890230404',1,'科长'
 
 
 SELECT b.Dpt_Name,[系主任]=MAX(CASE WHEN techer_typ='系主任' THEN teaname END ),[系主任电话]=MAX(CASE WHEN techer_typ='系主任' THEN Telephone END )
 ,[书记]=MAX(CASE WHEN techer_typ='书记' THEN teaname END ),[书记电话]=MAX(CASE WHEN techer_typ='书记' THEN Telephone END )
 ,[科长]=MAX(CASE WHEN techer_typ='科长' THEN teaname END ),[科长电话]=MAX(CASE WHEN techer_typ='科长' THEN Telephone END )
 FROM teacher a INNER  JOIN department b ON a.Dpt_Id=b.Dpt_Id
 GROUP BY b.Dpt_Name
 
 /*
 (3 行受影响)
 
 Dpt_Name   系主任                  系主任电话                书记                   书记电话                 科长                   科长电话
 ---------- -------------------- -------------------- -------------------- -------------------- -------------------- --------------------
 信息学院       张三                   18079240505          李四                   18923450505          陈明                   17890230404
 警告: 聚合或其他 SET 操作消除了 Null 值。
 
 (1 行受影响)
 
 
 */