㈠ sql 里面怎么把竖表变成横表
select 姓名,sum(case when 科目='数学' then 分数 end) as 数学,sum(case when 科目='语文' then 分数 end) as 语文,sum(case when 科目='英语' then 分数 end) as 英语 from 表名
group by 姓名
㈡ SQL中内容都为字符型的竖版表转横版,如何实现
Word默认为一节,而一节的页面格式是相同的,若想把一个WORD文件中的每一页随意设置成横版或是竖版,必须将其设置为单独一节,这样就可以单独设置了。
假设有一个10页文档,想让其中第3页为横板,设置步骤:
1、将光标放在第3的首位置,单击页面布局---->分隔符---->分节符---->下一页,如图所示;
2、将光标放在第3页的尾部,重复上面的操作上,使第3页成为单独一节;
3、光标放在第3页,单击页面布局---->纸张方向---->横向即可,如图所示。
㈢ 用 sql语句将数列的表转成横列的表,当张三拥有两个语文成绩时,怎么求和
你搞得太复杂了,用交叉表查询就行了
㈣ sql server 纵表转横表
如果单纯是你如上数据的话这样:
创建表:
createtablet
(idint,
orderidint,
prfnoint,
prfidvarchar(10));
insertintotvalues(16385,171202,1,'FB065_1');
insertintotvalues(16385,171202,2,'FB065_06');
insertintotvalues(16385,171202,3,'FB065_06');
insertintotvalues(16385,171202,4,'FB065_06');
insertintotvalues(16386,171202,1,'FB065_1');
insertintotvalues(16386,171202,2,'FB065_06');
insertintotvalues(16386,171202,3,'FB065_06');
insertintotvalues(16386,171202,4,'FB065_06');
执行:
selectid,orderid,
max(casewhenprfno=1thenprfidend)prfid1,
max(casewhenprfno=2thenprfidend)prfid2,
max(casewhenprfno=3thenprfidend)prfid3,
max(casewhenprfno=4thenprfidend)prfid4
fromtgroupbyid,orderid
结果:
如果需求复杂的话,就要改别的方法了。
㈤ SQL竖表转换为横表,跪求大侠帮忙!
建表及插入数据
createtablet(姓名varchar(10),课程varchar(10),分数int)
insertintotvalues('张三','语文',74)
insertintotvalues('张三','数学',83)
insertintotvalues('张三','物理',93)
insertintotvalues('李四','语文',74)
insertintotvalues('李四','数学',84)
insertintotvalues('李四','物理',94)
执行语句
select姓名,
'语文'课程1,sum(casewhen课程='语文'then分数else0end)成绩1,
'物理'课程2,sum(casewhen课程='物理'then分数else0end)成绩2,
'数学'课程3,sum(casewhen课程='数学'then分数else0end)成绩3
fromt
groupby姓名
运行结果
㈥ 如何通过sql将表中竖向数据转换成横向数据
行列转换等经典SQL语句
参考资料:http://blog.csdn.net/kiki113/archive/2009/04/24/4105929.aspx
1.--行列转换
原表: 姓名 科目 成绩
张三 语文 80
张三 数学 90
张三 物理 85
李四 语文 85
李四 物理 82
李四 英语 90
李四 政治 70
王五 英语 90
转换后的表: 姓名 数学 物理 英语 语文 政治
李四 0 82 90 85 70
王五 0 0 90 0 0
张三 90 85 0 80 0
实例:
create table cj --创建表cj
(
ID Int IDENTITY (1,1) not null, --创建列ID,并且每次新增一条记录就会加1
Name Varchar(50),
Subject Varchar(50),
Result Int,
primary key (ID) --定义ID为表cj的主键
);
--Truncate table cj
--Select * from cj
Insert into cj
Select '张三','语文',80 union all
Select '张三','数学',90 union all
Select '张三','物理',85 union all
Select '李四','语文',85 union all
Select '李四','物理',82 union all
Select '李四','英语',90 union all
Select '李四','政治',70 union all
Select '王五','英语',90
--行列转换
Declare @sql varchar(8000)
Set @sql = 'Select Name as 姓名'
Select @sql = @sql + ',sum(case Subject when '''+Subject+''' then Result else 0 end) ['+Subject+']'
from (select distinct Subject from cj) as cj --把所有唯一的科目的名称都列举出来
Select @sql = @sql+' from cj group by name'
Exec (@sql)
2. 行列转换--合并
原表: 班级 学号
1 1
1 2
1 3
2 1
2 2
3 1
转换后的表: 班级 学号
1 1,2,3
2 1,2
3 1
实例:
Create table ClassNo --创建表ClassNo
(
ID Int IDENTITY(1,1) not null, --创建列ID,并且每次新增一条记录就会加1
Class Varchar(50), --班级列
Number Varchar(50), --学号列
Primary Key(ID) --定义ID为表ClassNo的主键
);
--Truncate Table ClassNo
--Select * from ClassNo
Insert Into ClassNo
Select 1,1 Union all
Select 1,2 Union all
Select 1,3 Union all
Select 2,1 Union all
Select 2,2 Union all
Select 3,1
创建一个合并的函数
--Drop Function KFReturn
Create Function KFReturn(@Class Varchar(50))
Returns Varchar(8000)
as
Begin
Declare @str Varchar(8000)
Set @str = ''
Select @str = @str + cast(Number as Varchar(50)) + ',' from ClassNo Where Class = @Class
Set @str = SubString(@str,1,len(@str)-1)
Return(@str)
End
--调用自定义函数得到结果
Select Distinct Class,dbo.KFReturn(Class) From ClassNo
3:列转行
--Drop Table ColumnToRow
Create table ColumnToRow
(
ID Int IDENTITY(1,1) not null, --创建列ID,并且每次新增一条记录就会加1
a int,
b int,
c int,
d int,
e int,
f int,
g int,
h int,
Primary Key(ID) --定义ID为表ColumnToRow的主键
);
--Truncate Table ColumnToRow
--Select * from ColumnToRow
Insert Into ColumnToRow
Select 15,9,1,0,1,2,4,2 Union all
Select 22,34,44,5,6,7,8,7 Union all
Select 33,44,55,66,77,88,99,12
Declare @sql Varchar(8000)
Set @sql = ''
Select @sql = @sql + rtrim(name) + ' from ColumnToRow union all Select ' from SysColumns Where id = object_id('ColumnToRow')
Set @sql = SubString(@sql,1,len(@sql)-70)
--70的长度就是这个字符串'from ColumnToRow union all Select ID from ColumnToRow union all Select ',因为它会把ID这一列的值也算进去,所以要把它截掉
Exec ('Select ' + @sql + ' from ColumnToRow')
㈦ sql如何自动实现更新,竖表变横表,是要用触发器还是别的方法实现,具体代码如何写
----------这个问题要创建视图得到你想要的结果需要做一些处理
----------我这里用oracle为例,从建表开始
----创建测试表
droptabletest_1;
createtabletest_1
(gidvarchar(10),
gdescvarchar(100),
ac_datedate,
sale_moneydecimal(18,2),
sale_numdecimal(18,2)
);
-----插入测试数据
insertintotest_1
select'1001','A',to_date('2018/3/1','YYYY/MM/DD'),1000,500fromal
unionall
select'1002','B',to_date('2018/3/1','YYYY/MM/DD'),2000,600fromal
unionall
select'1003','C',to_date('2018/3/1','YYYY/MM/DD'),3000,700fromal
unionall
select'1001','A',to_date('2018/3/2','YYYY/MM/DD'),4000,800fromal
unionall
select'1002','B',to_date('2018/3/2','YYYY/MM/DD'),5000,900fromal
unionall
select'1003','C',to_date('2018/3/2','YYYY/MM/DD'),6000,1000fromal
unionall
select'1001','A',to_date('2018/3/3','YYYY/MM/DD'),7000,1100fromal
unionall
select'1002','B',to_date('2018/3/3','YYYY/MM/DD'),8000,1200fromal
unionall
select'1003','C',to_date('2018/3/3','YYYY/MM/DD'),9000,1300fromal
;
----创建视图
createviewv_test
as
select*from(
select
gid商品编号
,gdesc商品名称
,cast(SUM(casewhenac_date=to_date('2018/3/1','YYYY/MM/DD')
thensale_money
else0
end)asvarchar(20))"2018/3/1金额"
,cast(SUM(casewhenac_date=to_date('2018/3/2','YYYY/MM/DD')thensale_money
else0
end)asvarchar(20))"2018/3/2金额"
,cast(SUM(casewhenac_date=to_date('2018/3/3','YYYY/MM/DD')thensale_money
else0
end)asvarchar(20))"2018/3/3金额"
,cast(SUM(casewhenac_date=to_date('2018/3/1','YYYY/MM/DD')thensale_num
else0
end)asvarchar(20))"2018/3/1数量"
,cast(SUM(casewhenac_date=to_date('2018/3/2','YYYY/MM/DD')thensale_num
else0
end)asvarchar(20))"2018/3/2数量"
,cast(SUM(casewhenac_date=to_date('2018/3/3','YYYY/MM/DD')thensale_num
else0
end)asvarchar(20))"2018/3/3数量"
fromtest_1
groupbygid,gdesc
UNIONALL
SELECT''商品编号
,''商品名称
,'销售额'"2018/3/1金额"
,'销售额'"2018/3/2金额"
,'销售额'"2018/3/3金额"
,'销售量'"2018/3/1数量"
,'销售量'"2018/3/2数量"
,'销售量'"2018/3/2数量"
fromal
)A
orderby商品编号;
-----查询该视图信息,看看是否是想要的结果
select*fromv_test;
㈧ SQL 单表查询按字段分类统计如何横排显示
嵌入写:即简单,又易懂
select name ,
case type when '白班' then '1' else '' end as dayjob ,
case type when '夜班' then '1' else '' end as nightjob
from work
把上面这句做为整体,嵌入到下面。
select a.name ,count(a.dayjob),count(a.nightjob) from
(
select name ,
case type when '白班' then '1' else '' end as dayjob ,
case type when '夜班' then '1' else '' end as nightjob
from work
) as a group by a.name
括号里面就是一个子查询,这样就可以达到你的要求。
㈨ SQL中竖表变横表及统计功能实现的问题
在源表加一列月份,输入月份值。
select
[部门],
[费用项目],
sum(casewhensubstring([日期],5,2)='01'then[金额]else0end)as[1月总],
sum(casewhensubstring([日期],5,2)='02'then[金额]else0end)as[2月总],
sum(casewhensubstring([日期],5,2)='03'then[金额]else0end)as[3月总],
sum(casewhensubstring([日期],5,2)='04'then[金额]else0end)as[4月总],
sum(casewhensubstring([日期],5,2)='05'then[金额]else0end)as[5月总],
sum(casewhensubstring([日期],5,2)='06'then[金额]else0end)as[6月总],
sum(casewhensubstring([日期],5,2)='07'then[金额]else0end)as[7月总],
sum(casewhensubstring([日期],5,2)='08'then[金额]else0end)as[8月总],
sum(casewhensubstring([日期],5,2)='09'then[金额]else0end)as[9月总],
sum(casewhensubstring([日期],5,2)='10'then[金额]else0end)as[10月总],
sum(casewhensubstring([日期],5,2)='11'then[金额]else0end)as[11月总],
sum(casewhensubstring([日期],5,2)='12'then[金额]else0end)as[12月总]
fromtableA
groupby[部门],[费用项目]
㈩ sql竖表数据批量插入到横表中 注意是要插入到表中,不单单是查询出来
declare @idx int,@colName varchar(50),@tableID int,@sql varhcar(2000)
select @tableID=id from sysobjects where name='横表名'
set @idx=1
set @colName='Marks'+convert(varchar,@idx)
while(if exists(select * from sysocolumns where id=@tableID and name=@colName))
begin
set sql='insert into 纵表 select stuno,stuname,‘+@colName+’from 横表'
exec(@sql)
set @idx=@idx+1
set @colName='Marks'+convert(varchar,@idx)
end
没有调试,直观的基本上就是这个写法,复杂点的你可以单独再建个要需读取的列名表,循环取列名拼SQL再执行。
或者再写的复杂点,循环用union拼接select的部分
以上是针对类似问题的通用方案,适合列很多的情况。
如果仅限于上边的例 子不做任何扩展,最死的写法就是
insert into 纵表
from select * from(select stuno,stuname,marks1 from 横表
union select stuno,stuname,marks2 from 横表
union select stuno,stuname,marks3 from 横表
)t
当然如果直接查询生成表,也可以用select ...into的写法