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
管理 | 关闭窗口
作 者: 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
管理 | 关闭窗口
SUM(CASE c3 WHEN 'A' THEN c4 ELSE 0 END) AS A,
SUM(CASE c3 WHEN 'B' THEN c4 ELSE 0 END) AS B,
SUM(CASE c3 WHEN 'C' THEN c4 ELSE 0 END) AS C,
SUM(CASE c3 WHEN 'D' THEN c4 ELSE 0 END) AS D,
SUM(CASE c3 WHEN 'E' THEN c4 ELSE 0 END) AS E
FROM yourtable
GROUP BY c1, c2