sql语句怎么把列变成行
表的结构如下:sql语句怎么写,会生成如下结果:注意“品名”即要转为行的列,它的数据是会变化的,不是固定不变的;求sql语句!!具体在sqlserver2008数据库中的...
表的结构如下:
sql语句怎么写,会生成如下结果:
注意“品名”即要转为行的列,它的数据是会变化的,不是固定不变的;
求sql语句!!
具体在sqlserver2008数据库中的表结构如下: 展开
sql语句怎么写,会生成如下结果:
注意“品名”即要转为行的列,它的数据是会变化的,不是固定不变的;
求sql语句!!
具体在sqlserver2008数据库中的表结构如下: 展开
3个回答
展开全部
create table rotatetable1 (序号 int,company char(66),box_weight char(12),废塑料numeric(10,2)),废五金 numeric(10,2)),废钢铁 numeric(10,2)),废纸 numeric(10,2)),废有色 numeric(10,2)),废纤维 numeric(10,2)),其它 numeric(10,2)),合计 numeric(10,2)));
insert into rotatetable1(company,box_weight) select name ,'weight' from sum1 group by name;
insert into rotatetable1(company,box_weight) select name ,'box' from sum1 group by name;
update rotatetable1 set 废塑料=box from sum1as a where a.name=rotatetable1.company and box_weight='box' and hsname='废塑料';
update rotatetable1 set 废塑料=weight from sum1as a where a.name=rotatetable1.company and box_weight='weight' and hsname='废塑料';
::: :::
update rotatetable1 set 其它=box from sum1as a where a.name=rotatetable1.company and box_weight='box' and hsname='其它';
update rotatetable1 set 其它=weight from sum1as a where a.name=rotatetable1.company and box_weight='weight' and hsname='其它';
::: :::
update rotatetable1 set 合计=废塑料+废五金+废钢铁+废纸+废有色+废纤维+其它;
(所有涉及表的行列转换均可按照这种方式实现。)
insert into rotatetable1(company,box_weight) select name ,'weight' from sum1 group by name;
insert into rotatetable1(company,box_weight) select name ,'box' from sum1 group by name;
update rotatetable1 set 废塑料=box from sum1as a where a.name=rotatetable1.company and box_weight='box' and hsname='废塑料';
update rotatetable1 set 废塑料=weight from sum1as a where a.name=rotatetable1.company and box_weight='weight' and hsname='废塑料';
::: :::
update rotatetable1 set 其它=box from sum1as a where a.name=rotatetable1.company and box_weight='box' and hsname='其它';
update rotatetable1 set 其它=weight from sum1as a where a.name=rotatetable1.company and box_weight='weight' and hsname='其它';
::: :::
update rotatetable1 set 合计=废塑料+废五金+废钢铁+废纸+废有色+废纤维+其它;
(所有涉及表的行列转换均可按照这种方式实现。)
更多追问追答
追问
废塑料,废五金,废钢铁,废纸,废有色,废纤维,这些只是hsname其中的一些内容,它还有其他内容,该字段是可以添加的,而不是固定这几项,而且你不清楚是哪些内容的,要求是根据该字段的具体内容而转换
追答
没关系,只要是转换为横向,则横向的列名称就是有限个,而且适合设置为列名称。
有多少个就建多少个就行了。
如果不能得到这个名称表,可以使用以下SQL语句取出来:
select hsname from sum1 group by hsname
把需要的都建上,不需要的sum到其它中就行了。
纵横转换就是把纵向的有限名称值转为列名:这就是转置的本质。
展开全部
很简单的行转列,用unpivot,给你个例子
create table #temp (id int,name varchar(10),weight decimal(10,2),bos int,hsname varchar(10))
go
insert into #temp values(1,'有限公司',20.1,7,'废塑料')
go
select * from #temp
;
with tb as (
select name,cast(weight as varchar(10)) weight,cast(bos as varchar(10)) bos,hsname from #temp where id=1
)
select 项目,值 from tb unpivot (值 for 项目 in([name],[weight],bos,hsname))t
--------------------------------------
项目 值
name 有限公司
weight 20.10
bos 7
hsname 废塑料
你自己参考测试看看。如没有问题还请采纳。
更多追问追答
追问
那个表已经在sqlser2008中存在了,表名是Sum1;
问题:
把hsname的具体内容作为行,然后根据公司名,把重量和箱子数这两列分别显示,并求和;
追答
;with tb as (
select id,name,weight+bos zl,hsname from #temp
)
select name,废塑料 from tb pivot (max(zl) for hsname in ([废塑料]) )t
name 废塑料
有限公司 27.10
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如果是oracle可以用case或者decode
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询