Ⅰ oracle的sql语句列转行
不同人的uuid是不一样的吗?
select
(selectzfromtabnameaawherezmc='姓名'andaa.uuid=a.uuid)姓名,
(selectzfromtabnameaawherezmc='年龄'andaa.uuid=a.uuid)年龄,
(selectzfromtabnameaawherezmc='英文名称'andaa.uuid=a.uuid)英文名称,
(selectzfromtabnameaawherezmc='性别'andaa.uuid=a.uuid)性别,
(selectzfromtabnameaawherezmc='入职日期'andaa.uuid=a.uuid)入职日期,
(selectzfromtabnameaawherezmc='个人信息'andaa.uuid=a.uuid)个人信息
from(selectdistinctuuidfromtabname)a
Ⅱ SQL语句 列转行
-- ========================= PIVOT 行列转置 ===========================
-- 1、【行列转置PIVOT】
declare @Score table(StuNo varchar(10), StuName varchar(50), CourseName varchar(50), Score int)
insert into @Score
select '1', 'Tom', 'Math', 80 union all
select '1', 'Tom', 'English', 82 union all
select '1', 'Tom', 'Geography', 84 union all
select '2', 'Jone', 'Math', 79 union all
select '2', 'Jone', 'English', 88 union all
select '2', 'Jone', 'Geography',86
select * from @Score
SELECT StuNo, StuName, Math, English, [Geography]
FROM @Score PIVOT (MAX(Score) FOR CourseName in (Math, English, [Geography]) ) AS ScoreList
ORDER BY StuNo
-- 2、【列行转置UNPIVOT】
declare @ScoreList table(StuNo varchar(10), StuName varchar(50), Math int, English int, [Geography] int)
insert into @ScoreList
select '1', 'Tom', 80, 82, 84 union all
select '2', 'Jone', 79, 88, 86
select * from @ScoreList
SELECT StuNo, StuName, CourseName, Score
FROM @ScoreList UNPIVOT (Score FOR CourseName in (Math, English, [Geography]) ) AS ScorePvtTable
ORDER BY StuNo
Ⅲ 请教sql 列转行问题
select cOrder,cCode,
cl1=isnull((select sum(cl) from tb a where day(cdate)=1),0) and tb.corder=a.corder and tb.ccode=a.ccode),0),
cl2=isnull((select sum(cl) from tb a where day(cdate)=2),0) and tb.corder=a.corder and tb.ccode=a.ccode),0),
cl3=isnull((select sum(cl) from tb a where day(cdate)=3),0) and tb.corder=a.corder and tb.ccode=a.ccode),0),
cl4=isnull((select sum(cl) from tb a where day(cdate)=4),0) and tb.corder=a.corder and tb.ccode=a.ccode),0),
cl5=isnull((select sum(cl) from tb a where day(cdate)=5),0) and tb.corder=a.corder and tb.ccode=a.ccode),0),
cl6=isnull((select sum(cl) from tb a where day(cdate)=6),0) and tb.corder=a.corder and tb.ccode=a.ccode),0),
/*复制30行或31行,然后更改“日”Cxx和day(cdate)=x两个位置
.
.
.
*/
cl30=isnull((select sum(cl) from tb a where day(cdate)=30),0) and tb.corder=a.corder and tb.ccode=a.ccode),0),
合计=isnull((select sum(cl) from tb a where month(cdate)=6 and year(cdate)=2013 and tb.corder=a.corder and tb.ccode=a.ccode),0)
from tb where month(cdate)=6 and year(cdate)=2013
Ⅳ sql 列转行
先建一张转换后的表
create table changed
(
id number,
key varchar2(10),
val varchar2(10)
)
然后执行下面的插入语句
insert all
into changed(id,key,val) values(id,'a',a)
into changed(id,key,val) values(id,'b',b)
into changed(id,key,val) values(id,'c',c)
into changed(id,key,val) values(id,'d',d)
into changed(id,key,val) values(id,'e',e)
select id,a,b,c,d,e from change;
如果需要继续添加,就模仿上面的格式写好了,最后别忘记commit;
Ⅳ 死磕:SQL行转列汇总(全网最全最详细)
阅读目录
PIVOT 用于将列值旋转为列名(即行转列),在 SQL Server 2000可以用聚合函数配合CASE语句实现
PIVOT 的一般语法是:PIVOT(聚合函数(列) FOR 列 in (…) )AS P
注意:PIVOT、UNPIVOT是SQL Server 2005 的语法,使用需修改数据库兼容级别(在数据库属性->选项->兼容级别改为 90 )
SQL2008 中可以直接使用
完整语法:
View Code
UNPIVOT 用于将列明转为列值(即列转行),在SQL Server 2000可以用UNION来实现
姓名 课程 分数
---------- ---------- -----------
张三 语文 74
张三 数学 83
张三 物理 93
李四 语文 74
李四 数学 84
李四 物理 94
姓名 语文 数学 物理
---------- ----------- ----------- -----------
李四 74 84 94
张三 74 83 93
姓名 语文 数学 物理 总分 平均分
---------- ----------- ----------- ----------- -----------
李四 74 84 94 252 84.00
张三 74 83 93 250 83.33
姓名 语文 数学 物理
---------- ----------- ----------- -----------
张三 74 83 93
李四 74 84 94
姓名 课程 分数
---------- ---- -----------
李四 语文 74
李四 数学 84
李四 物理 94
张三 语文 74
张三 数学 83
张三 物理 93
最后给大家分享Spring系列的学习笔记和面试题,包含spring面试题、spring cloud面试题、spring boot面试题、spring教程笔记、spring boot教程笔记、最新阿里巴巴开发手册(63页PDF总结)、2022年Java面试手册。一共整理了1184页PDF文档。私信博主(777)领取,祝大家更上一层楼!!!
原文作者:王思明
原文出处:http://www.cnblogs.com/maanshancss/
Ⅵ sql语句列转行
我整理的行转列的问题:
--创建tb表
createtabletb(姓名varchar(10),课程varchar(10),分数int)
insertintotbvalues('张三','语文',74)
insertintotbvalues('张三','数学',83)
insertintotbvalues('张三','物理',93)
insertintotbvalues('李四','语文',74)
insertintotbvalues('李四','数学',84)
insertintotbvalues('李四','物理',94)
go
select*Fromtb
--SQLSERVER2000静态行转列
select姓名as姓名,
max(case课程when'语文'then分数elsenullend)语文,
max(case课程when'数学'then分数elsenullend)数学,
max(case课程when'物理'then分数elsenullend)物理
fromtb
groupby姓名
--SQLSERVER2000动态SQL,指课程不止语文、数学、物理这三门课程。(以下同)
declare@sqlvarchar(8000)
set@sql='select姓名'
select@sql=@sql+',max(case课程when'''+课程+'''then分数else0end)['+课程+']'
from(selectdistinct课程fromtb)asa
set@sql=@sql+'fromtbgroupby姓名'
exec(@sql)
--SQLSERVER2005静态SQL。
select*from(select*fromtb)apivot(max(分数)for课程in(语文,数学,物理))b
--SQLSERVER2005动态SQL。
declare@sqlvarchar(8000)
select@sql=isnull(@sql+'],[','')+课程fromtbgroupby课程
set@sql='['+@sql+']'
exec('select*from(select*fromtb)apivot(max(分数)for课程in('+@sql+'))b')
希望对你的学习有帮助。