==================================聲明==================================
本文原創,轉載在正文中顯要的注明作者和出處,并保證文章的完整性。
未經作者同意請勿修改(包括本聲明),保留法律追究的權利。
未經作者同意請勿用于學術性引用。
未經作者同意請勿用于商業出版、商業印刷、商業引用。
本文不定期修正完善,為保證內容正確,建議移步原文處閱讀。
本文鏈接:http://www.cnblogs.com/wlsandwho/p/4423956.html
=======================================================================
看了好長時間的資料,總算是看懂了點。(另外怎樣才能把右面的這個長毛的土豆去掉?----> 對,就是它!)
趕緊記錄下來。
=======================================================================
表格和數據。(和http://www.cnblogs.com/wlsandwho/p/4416222.html的相同)
1 USE tempdb 2 GO 3 -------------------------------------------------------------------------- 4 IF OBJECT_ID('Student','U') IS NOT NULL 5 DROP TABLE Student 6 GO 7 8 CREATE TABLE Student 9 (10 StuID NVARCHAR(8) PRIMARY KEY,11 Name NVARCHAR(5),12 EntranceTime DATETIME13 )14 GO15 16 INSERT INTO Student(StuID,Name,EntranceTime) VALUES('20080001','Lily','2008-08-27')17 INSERT INTO Student(StuID,Name,EntranceTime) VALUES('20090002','Lucy','2009-08-26')18 INSERT INTO Student(StuID,Name,EntranceTime) VALUES('20070003','Jack','2007-08-28')19 GO20 --------------------------------------------------------------------------21 IF OBJECT_ID('SltCourse','U') IS NOT NULL22 DROP TABLE SltCourse23 GO24 25 CREATE TABLE SltCourse --SelectiveCourse26 (27 ID INT PRIMARY KEY IDENTITY(1,1),28 StuID NVARCHAR(8),29 CourseName NVARCHAR(10),30 Score INT 31 )32 GO33 34 INSERT INTO SltCourse(StuID,CourseName,Score) VALUES('20070003','電腦維修',90)35 INSERT INTO SltCourse(StuID,CourseName,Score) VALUES('20070003','剪紙',80)36 INSERT INTO SltCourse(StuID,CourseName,Score) VALUES('20070003','市場策劃',95)37 INSERT INTO SltCourse(StuID,CourseName,Score) VALUES('20070003','信息檢索',100)38 39 INSERT INTO SltCourse(StuID,CourseName,Score) VALUES('20080001','插花',99)40 INSERT INTO SltCourse(StuID,CourseName,Score) VALUES('20080001','剪紙',96)41 INSERT INTO SltCourse(StuID,CourseName,Score) VALUES('20080001','刺繡',92)42 43 INSERT INTO SltCourse(StuID,CourseName,Score) VALUES('20090002','插花',98)44 GO
查看一下
1 SELECT s.StuID,s.Name,s.EntranceTime,sc.CourseName,sc.Score FROM Student s,SltCourse sc WHERE s.stuid=sc.stuid2 GO
=======================================================================
現在來看這個表格,前三列有很多數據是重復的,而且也不便于閱讀。之前使用了row_number函數,這里使用下別的——PIVOT來實現一個行轉列。
預期效果。
=======================================================================
靜態版。這需要預知要轉換成列名的數據。
1 WITH ReportCard 2 AS(3 SELECT s.StuID,s.Name,s.EntranceTime,sc.CourseName,sc.Score FROM Student s,SltCourse sc WHERE s.stuid=sc.stuid4 )5 SELECT * FROM ReportCard PIVOT(MAX(Score) FOR CourseName IN([電腦維修],[剪紙],[市場策劃],[信息檢索],[插花],[刺繡]) ) AS T6 GO
結果。
新聞熱點
疑難解答