注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

银河军团大本营

光荣的军团,永远的丰碑 <坚持原创>

 
 
 

日志

 
 

MSSQL中行列互换(交叉表)  

2013-10-26 15:31:25|  分类: SQL |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

  有一个表:

八位款号 色号 尺码 数量 单价 合计金额
16041512 01 48 2 250 500
16041512 01 50 3 250 750
16041512 01 52 1 250 250
16041512 01 54 4 250 1000

  想实现如下的结果:

八位款号 色号 合计数量 合计金额 48 50 52 54
16041512 01 10 2500 2 3 1 4

/*实现如下(以MSSQL为列)*/

create table T_Garment (
八位款号 char(8) not null,
色号 char(2) not null,
尺码 varchar(8) not null,
数量 int not null,
单价 decimal(18,8) not null,
合计金额 money not null,
constraint PK_T_GARMENT primary key (八位款号, 色号, 尺码)
)
go

insert into T_Garment values('16041512', '01', '48', 2, 250, 500);
insert into T_Garment values('16041512', '01', '50', 3, 250, 750);
insert into T_Garment values('16041512', '01', '52', 1, 250, 250);
insert into T_Garment values('16041512', '01', '54', 4, 250, 1000);
insert into T_Garment values('17280835', '02', '36', 7, 240, 1680);
insert into T_Garment values('17280835', '03', '36', 8, 240, 1920);
insert into T_Garment values('17280835', '03', '48', 8, 240, 1920);
insert into T_Garment values('22345677', '17', '42', 9, 266, 2394);
go

declare @s varchar(8000)
select @s=''
select @s=@s + ',' + 'sum(case 尺码 when ''' + 尺码 +
''' then 数量 else 0 end) as ''' + 尺码 + ''''
from (select distinct 尺码 from T_Garment) as x
select @s='select 八位款号, 色号, sum(数量) as 合计数量, sum(合计金额) as 合计金额 '
+ @s + 'from T_Garment g group by 八位款号, 色号 order by 八位款号, 色号'
exec (@s)
go

  以上代码在查询分析器中执行通过,当然,也可以写成存储过程来调用。此外,尺码也不能太多,否则varchar(8000)可能不够用。

  评论这张
 
阅读(606)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018