我有两张表是这样的:一张是订单表,另一张是订单明细表,现在要求在显示时各个商品的数量与订单号显示在同一行(可以理解成同一个表吧),并且显示完成后需要对各个商品的总数进行汇总。如下:订单号 总额 时间 旺旺 美的 海尔
------------------------------------------------------------------------
001245 12000.00 2004-12-20 15 15 15
…… …… …… …… …… ……
------------------------------------------------------------------------
合计 XXXXXX XXXX XXXXX XXXXX我的做法是在程序中新建一个表(用.net中的DataSet),结合两张表把数据合并到这个新表中、完了后再循环每条记录汇总。这样好慢,有没有更好的办法!
谢谢!
------------------------------------------------------------------------
001245 12000.00 2004-12-20 15 15 15
…… …… …… …… …… ……
------------------------------------------------------------------------
合计 XXXXXX XXXX XXXXX XXXXX我的做法是在程序中新建一个表(用.net中的DataSet),结合两张表把数据合并到这个新表中、完了后再循环每条记录汇总。这样好慢,有没有更好的办法!
谢谢!
as
set nocount on
declare @s varchar(8000)
set @s=''
select @s=@s+',['+rtrim(商品)+']sum(case b.商品 when '''+rtrim(商品)+''' then b.金额 else 0 end)'
from 订单明细表 group by 商品
exec('
select 订单号=case grouping(a.订单号) when 1 then ''合计'' else a.订单号 end
,总额=sum(b.金额)
,时间=case grouping(a.订单号) when 1 then '''' else convert(char(10),a.时间,120) end
'+@s+'
from 订单表 a,订单明细表 b
where a.订单号=b.订单号
group by a.订单号,convert(char(10),a.时间,120) with rollup
')
create proc p_test
as
--建表
create table tb(id int)--增加字段
alter table tb add name nvarchar(20)--调整顺序(这个在SQL中是没有语句可以直接做到的,所以直接用select 列表就行了
--因为新加的字段无法直接生效,所以要用exec
exec('
select name,id from tb
')
go--调用
exec p_test
go--删除测试
drop proc p_test
drop table tb
--------------------------------------
订单号 时间
----------------------
001 20041220
----------------------订单明细表
--------------------------------------------------------
订单号 商品编号 商品名称 数量
--------------------------------------------------------
001 SP-001 美的空调 15
001 SP-002 海尔空调 15
001 SP-003 华菱空凋 15
--------------------------------------------------------商品信息表
--------------------------------------------------------
商品编号 名称
------------------------
SP-001 美的空调
SP-002 海尔空调
SP-003 华菱空调
SP-004 三洋电机
------------------------查询后需要达到如下效果:
----------------------------------------------------------------------------
订单号 时间 美的空调 海尔空调 华菱空调 三洋电机
----------------------------------------------------------------------------
001 20041220 15 15 15 0
----------------------------------------------------------------------------
合计 15 15 15 0
as
create table #tb_u2(id int)alter table #tb_u2 add name_n nvarchar(20)exec('
select name_n,id from #tb_u2
')
goexec #pr_u2
go