MS SQL Server 2005微软推出了pivot和unpivot实现队伍的行列,大大方便了我们的数据和演示文稿中的数据存储。今天,这两个关键词进行了分析,并以实例说明了如何存储数据、如何展示数据。
例如,在学生选课和成绩
系统中,有一个存储学生课程成绩的表,我们不能预测课程的数量。因此,一般表的设计如下:
图1
最后一列是课程编号,所以如果它不会增加学生放学后选择的课程,那么我们必须向
用户提交的
报告大致上是这样的:
图2
你可以看到当存储的数据在存储中使用时,数据的最终
显示正在显示,如何实现以下
详细的分析和说明:
创建表语句
复制代码代码如下所示:
使用{主}
去
对象:表{ } { } dbo。table_1
脚本日期:08 / 06 / 2013 / ****** 13:55:39 ****** /
ansi_nulls上集
去
quoted_identifier上集
去
ansi_padding上集
去
创建表{ } { }(table_1 dbo。
{姓名} { varchar }(50)不为空,
{ { } }不为空,
{ } { }不空subject_id int
在{主}上
去
ansi_padding下集
去
插入测试数据
复制代码代码如下所示:
插入{掌握}。{ DBO }。{ table_1 }({姓名},{成绩},{ subject_id })值('zhang三',90, 1);
插入{掌握}。{ DBO }。{ table_1 }({姓名},{成绩},{ subject_id })值('zhang三',80, 2);
插入{掌握}。{ DBO }。{ table_1 }({姓名},{成绩},{ subject_id })值('zhang三',70, 3);
插入{掌握}。{ DBO }。{ table_1 }({姓名},{成绩},{ subject_id }(国王)值五,50, 1);
插入{掌握}。{ DBO }。{ table_1 }({姓名},{成绩},{ subject_id }(国王)值五,40, 2);
插入{掌握}。{ DBO }。{ table_1 }({姓名},{成绩},{ subject_id })值(李四',60, 1);
现在
查询的数据在table_1图1中的结果,现在我们要得到图2的结果,然后使用下面的语句:
复制代码代码如下所示:
选择{ }、{ 1 }、{ 2 }、{ 3 }
{掌握}。{ } { }从table_1 dbo。
枢轴
(
和(评分)在为subject_id({ 1 },{ 2 },{ 3 })
当PVT
去
如果自己的数据库表存储在图2中,可以在图1的方式呈现,你需要使用透视,可以做。
复制代码代码如下所示:
选择{姓名},{ subject_id },{分}
从
(
选择{ }、{ 1 }、{ 2 }、{ 3 }
{掌握}。{ } { }从table_1 dbo。
枢轴
(
和(评分)在为subject_id({ 1 },{ 2 },{ 3 })
当PVT
P)
逆透视
(
在subject_id评分({ 1 },{ 2 },{ 3 })
作为unpvt
当然,我在table_1基础PVT进行存储,然后逆透视列显示。