SQL Server 实现 行转列、列转行
来源:互联网 发布:电路仿真软件中文版 编辑:程序博客网 时间:2024/04/30 00:53
行列互转是我们在开发过程中经常碰到的问题。行转列一般通过CASE WHEN 语句来实现,也可以通过 SQL SERVER 2005 新增的运算符PIVOT来实现。 用传统的方法,比较好理解。层次清晰,而且比较习惯。 但是PIVOT 、UNPIVOT提供的语法比一系列复杂的 SELECT...CASE 语句中所指定的语法更简单、更具可读性。
行转列的实现:
CREATE TABLE #StudentScores( [UserName] NVARCHAR(20), --学生姓名 [Subject] NVARCHAR(30), --科目 [Score] FLOAT, --成绩)INSERT INTO #StudentScores SELECT 'Nick', '语文', 80INSERT INTO #StudentScores SELECT 'Nick', '数学', 90INSERT INTO #StudentScores SELECT 'Nick', '英语', 70INSERT INTO #StudentScores SELECT 'Nick', '生物', 85INSERT INTO #StudentScores SELECT 'Kent', '语文', 45INSERT INTO #StudentScores SELECT 'Kent', '数学', 67INSERT INTO #StudentScores SELECT 'Kent', '英语', 97INSERT INTO #StudentScores SELECT 'Kent', '生物', 34
select [UserName],[语文],[数学],[英语],[生物]from(select [UserName],[Subject],[Score] from #StudentScores) apivot(max(Score) for [Subject] in ([语文],[数学],[英语],[生物])) as t
列转行的实现:
CREATE TABLE #Temp( [UserName] NVARCHAR(20), [语文] float, [数学] float, [英语] float, [生物] float )insert into #Temp select 'Nick',80,90,70,85insert into #Temp select 'Kent',45,67,97,34
SELECT UserName,[Subject],ScoreFROM ( SELECT UserName, [语文], [数学],[英语], [生物] FROM #Temp)TUNPIVOT ( Score FOR [Subject] IN ([语文], [数学],[英语], [生物])) P
- SQL Server 实现 行转列、列转行
- Sql Server使用游标实现列转行
- sql server 列转行
- sql server 列转行
- SQL Server 列转行
- SQL SERVER 2000/2005 列转行 行转列
- SQL SERVER 2000/2005 列转行 行转列
- Sql SerVer 查询行转列、列转行
- SQL Server 2005 列转行
- SQL行转列 列转行
- SQL行转列,列转行
- SQL 列转行/行转列
- SQL行转列,列转行
- SQL行转列,列转行
- SQL行转列、列转行
- sql行转列,列转行
- SQL 行转列 列转行
- SQL Server 中行转列 列转行
- c# 对ArcEngine中ITable对象的使其具有更加强大的功能。
- Fedora Nfs
- DB2高可用性灾难恢复
- 线程同步
- Feedback Nerual Network(二):Stability and Attractor
- SQL Server 实现 行转列、列转行
- 将屏幕保存为图片的方法
- RedHat AS4 + HeartBeat 双机热备方案
- WinCE6.0 DEVICEEMULATOR BSP的CEDDK简析
- C#中使用委托和事件实现观察者模式(observer pattern)
- 逆向了一下hh.exe
- DB2学习过程--DB2 HADR配置
- C++内存分配、管理
- 理解观察者模式(Observer Pattern)必看的文章