sql语句怎么把列变成行

表的结构如下:sql语句怎么写,会生成如下结果:注意“品名”即要转为行的列,它的数据是会变化的,不是固定不变的;求sql语句!!具体在sqlserver2008数据库中的... 表的结构如下:

sql语句怎么写,会生成如下结果:

注意“品名”即要转为行的列,它的数据是会变化的,不是固定不变的;
求sql语句!!
具体在sqlserver2008数据库中的表结构如下:
展开
 我来答
zyc
2014-05-16 · 知道合伙人软件行家
zyc
知道合伙人软件行家
采纳数:328 获赞数:5073
擅长数据通信、路由器组网、C++语言、数据库SQL语言、GP

向TA提问 私信TA
展开全部
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 合计=废塑料+废五金+废钢铁+废纸+废有色+废纤维+其它;

(所有涉及表的行列转换均可按照这种方式实现。)
更多追问追答
追问
废塑料,废五金,废钢铁,废纸,废有色,废纤维,这些只是hsname其中的一些内容,它还有其他内容,该字段是可以添加的,而不是固定这几项,而且你不清楚是哪些内容的,要求是根据该字段的具体内容而转换
追答
没关系,只要是转换为横向,则横向的列名称就是有限个,而且适合设置为列名称。
有多少个就建多少个就行了。
如果不能得到这个名称表,可以使用以下SQL语句取出来:
select hsname from sum1 group by hsname
把需要的都建上,不需要的sum到其它中就行了。
纵横转换就是把纵向的有限名称值转为列名:这就是转置的本质。
Ailiex
2014-05-15 · TA获得超过996个赞
知道小有建树答主
回答量:1108
采纳率:37%
帮助的人:556万
展开全部

很简单的行转列,用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

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
夜玄冬
2014-05-16 · 超过71用户采纳过TA的回答
知道小有建树答主
回答量:230
采纳率:100%
帮助的人:140万
展开全部
如果是oracle可以用case或者decode
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式