http://expert.csdn.net/Expert/topic/3029/3029633.xml?temp=.9674341主  题:  查询语句问题 
作  者:  berylw (漏洞)  
等  级:    
信 誉 值:  100 
所属论坛:  MS-SQL Server 基础类 
问题点数:  50 
回复次数:  7 
发表时间:  2004-05-03 12:11:27 
   
 
   
表中字段:
商品ID  商品名  商品库位  库存数量 
001     冰箱    A001       3       
002     电视    A001       3       
003     空调    A001       3       
001     冰箱    A002       3  
001     冰箱    A003       3       要求结果:
商品ID  商品名  库位A001  库位A002  库位A003  合计 
001     冰箱      3        3           3       9
002     电视      3        0           0       3 
003     空调      3        0           0       3其中库位是动态的,不一定有几个库位,或许很多,并且要求只让用SQL的一条语句实现,不能写存储过程。
这种要求很过分,我也知道,不过这是老总的要求,各位帮忙了,先谢过。 
  
 
 
 回复人: internetcsdn(公元1979年8月10日) ( ) 信誉:100  2004-05-03 12:18:00  得分:0 
 
 
  学习
  
 
Top 
 
 回复人: zjcxc(邹建) ( ) 信誉:298  2004-05-03 12:29:00  得分:0 
 
 
  --一条语句就真的过分了,因为你的货位是动态的,这样写吧declare @s varchar(8000)
set @s=''
select @s=@s+',[库位'+商品库位+']=sum(case 商品库位 when '''+商品库位+''' then 库存数量 else 0 end)'
from 表
group by 商品库位
exec('select 商品ID,商品名'+@s+'
from 表
group by 商品ID,商品名')  
 
Top 
 
 回复人: berylw(漏洞) ( ) 信誉:100  2004-05-03 12:29:00  得分:0 
 
 
  
昏,一楼来了一个跟我一样笨的。HOHO
  
 
Top 
 
 回复人: internetcsdn(公元1979年8月10日) ( ) 信誉:100  2004-05-03 12:31:00  得分:0 
 
 
  楼上:
我不否认
  
 
Top 
 
 回复人: zjcxc(邹建) ( ) 信誉:298  2004-05-03 12:31:00  得分:0 
 
 
  --上面少了合计declare @s varchar(8000)
set @s=''
select @s=@s+',[库位'+商品库位+']=sum(case 商品库位 when '''+商品库位+''' then 库存数量 else 0 end)'
from 表
group by 商品库位
exec('select 商品ID,商品名'+@s+',合计=sum(库存数量)
from 表
group by 商品ID,商品名')
  
 
Top 
 
 回复人: zjcxc(邹建) ( ) 信誉:298  2004-05-03 12:32:00  得分:0 
 
 
  --测试--测试数据
create table 表(商品ID char(3),商品名 varchar(10),商品库位 char(4),库存数量 int)
insert 表 select '001','冰箱','A001',3
union all select '002','电视','A001',3
union all select '003','空调','A001',3
union all select '001','冰箱','A002',3
union all select '001','冰箱','A003',3
go--查询
declare @s varchar(8000)
set @s=''
select @s=@s+',[库位'+商品库位+']=sum(case 商品库位 when '''+商品库位+''' then 库存数量 else 0 end)'
from 表
group by 商品库位
exec('select 商品ID,商品名'+@s+',合计=sum(库存数量)
from 表
group by 商品ID,商品名')
go--删除测试
drop table 表/*--测试结果商品ID 商品名        库位A001      库位A002      库位A003      合计          
---- ---------- ----------- ----------- ----------- ----------- 
001  冰箱         3           3           3           9
002  电视         3           0           0           3
003  空调         3           0           0           3
--*/
  
 
Top 
 
 回复人: berylw(漏洞) ( ) 信誉:100  2004-05-03 12:40:00  得分:0 
 
 
  
未果,还是2条语句实现的,有没有更好的办法了?
  
 
Top 
 
 
 
 
    
 
 
 管理 | 关闭窗口