sql 列转行
来源:互联网 发布:c语言入门编程 编辑:程序博客网 时间:2024/06/16 12:12
一、列转行
1、建立表格
ifobject_id(
'tb'
)isnotnulldroptabletb
go
createtabletb(姓名
varchar
(10),课程
varchar
(10),分数
int
)
insertintotbvalues(
'张三'
,
'语文'
,74)
insertintotbvalues(
'张三'
,
'数学'
,83)
insertintotbvalues(
'张三'
,
'物理'
,93)
insertintotbvalues(
'李四'
,
'语文'
,74)
insertintotbvalues(
'李四'
,
'数学'
,84)
insertintotbvalues(
'李四'
,
'物理'
,94)
go
select
*fromtb
go
姓名 课程 分数
---------- ---------- -----------
张三 语文 74
张三 数学 83
张三 物理 93
李四 语文 74
李四 数学 84
李四 物理 94
2、使用SQL Server 2000静态SQL
--c
select
姓名,
max
(
case
课程
when
'语文'
then
分数else0end)语文,
max
(
case
课程
when
'数学'
then
分数else0end)数学,
max
(
case
课程
when
'物理'
then
分数else0end)物理
fromtb
groupby姓名
姓名 语文 数学 物理
---------- ----------- ----------- -----------
李四 74 84 94
张三 74 83 93
3、使用SQL Server 2000动态SQL
--SQL SERVER 2000动态SQL,指课程不止语文、数学、物理这三门课程。(以下同)
--变量按sql语言顺序赋值
declare
@sqlvarchar(500)
set
@sql=
'select姓名'
select
@sql=@sql+
',max(case课程when '
''
+课程+
''
' then分数else 0 end)['
+课程+
']'
from
(selectdistinct课程fromtb)a
--同from tb group by课程,默认按课程名排序
set
@sql=@sql+
' from tb group by姓名'
exec
(@sql)
--使用isnull(),变量先确定动态部分
declare
@sqlvarchar(8000)
select
@sql=
isnull
(@sql+
','
,
''
)+
' max(case课程when '
''
+课程+
''
' then分数else 0 end) ['
+课程+
']'
from
(selectdistinct课程fromtb)asa
set
@sql=
'select姓名,'
+@sql+
' from tb group by姓名'
exec
(@sql)
姓名 数学 物理 语文
---------- ----------- ----------- -----------
李四 84 94 74
张三 83 93 74
4、使用SQL Server 2005静态SQL
select
*fromtb pivot(
max
(分数)
for
课程
in
(语文,数学,物理))a
5、使用SQL Server 2005动态SQL
--使用stuff()
declare
@sqlvarchar(8000)
set
@sql=
''
--初始化变量@sql
select
@sql=@sql+
','
+课程fromtbgroupby课程
--变量多值赋值
set
@sql=stuff(@sql,1,1,
''
)
--去掉首个','
set
@sql=
'select * from tb pivot (max(分数) for课程in ('
+@sql+
'))a'
exec
(@sql)
--或使用isnull()
declare
@sqlvarchar(8000)
–-获得课程集合
select
@sql=
isnull
(@sql+
','
,
''
)+课程fromtbgroupby课程
set
@sql=
'select * from tb pivot (max(分数) for课程in ('
+@sql+
'))a'
exec
(@sql)
0 0
- sql列转行
- sql列转行
- 列转行SQL
- sql列转行
- sql列转行
- SQL 列转行
- SQL行转列 列转行
- sql 列转行
- SQL行转列,列转行
- sql 列转行
- sql 列转行
- SQL 列转行
- SQL列转行
- 列转行sql
- SQL 列转行
- SQL 列转行/行转列
- SQL 列转行
- sql server 列转行
- MyBatis入门(三)---多个参数
- php 下载pdf
- 杭电ACM-HDU1005-Number Sequence
- Android实现波浪效果 - WaveView
- XML
- sql 列转行
- dom4j解析xml格式字符串
- IMS简介
- iOS ---视图切换
- 超全局变量$_SERVER和$_ENV
- Monkey命令介绍
- R语言学习之获取数据的学习(XML和JSON文件的读取)
- NSCondition与Synchronized
- 为何要写技术博客