类型 颜色 规格 数量 单价 金额
11 红 X 2 3 6
11 红 L 1 3 3
11 绿 XXL 1 3 3
11 红 X 1 3 3
22 绿 XXL 1 4 4
22 绿 XXXL 1 4 4
22 黑 L 1 4 4
;; ;; ;; ; ; ;
我想得到一个这样的汇总
类型 颜色 X L XXL XXXL .... (小计)数量 单价 金额
11 红 3 1 4 3 12
11 绿 1 1 3 3
小计 5 15
22 绿 1 1 2 4 8
22 黑 1 1 4 4
.... ..... .......
...... ...... .......
小计 3 12
合计 8 27
请高手指点一下,谢谢!!!!!
11 红 X 2 3 6
11 红 L 1 3 3
11 绿 XXL 1 3 3
11 红 X 1 3 3
22 绿 XXL 1 4 4
22 绿 XXXL 1 4 4
22 黑 L 1 4 4
;; ;; ;; ; ; ;
我想得到一个这样的汇总
类型 颜色 X L XXL XXXL .... (小计)数量 单价 金额
11 红 3 1 4 3 12
11 绿 1 1 3 3
小计 5 15
22 绿 1 1 2 4 8
22 黑 1 1 4 4
.... ..... .......
...... ...... .......
小计 3 12
合计 8 27
请高手指点一下,谢谢!!!!!
解决方案 »
- 跨表更新-有点复杂-求改写代码!
- 登录名属性的服务器角色有八个,请帮忙说出每一个的功能,谢谢!
- 求一SQL语用,用于替换字段中指定的内容中间的内容!大侠进
- sql 的between问题,取不到值
- 如何判断 'A'是否在 'ABCD’里???
- 简单问题,导入数据
- sql语句左连接,单字段多条件
- ==坚硬的问题!!!!谁能告诉我???==在线等ing
- 数据库系统概论中的范式 问题判断下列关系模式各达到哪一级范式 如能回复不胜感激!!!散分200
- 如何有存储过程在两个不同排序规则的数据库中进行数据的联查
- 统计某一用户在某一段时间内(一个星期或一个月)录单数,SQL语句如何写呢?
- 新手求一个规则的写法~!
set @s = 'select 类型,颜色'
select @s= @s +',['+规格+'] = sum(case 规格 when '''+规格+''' then 数量 else 0 end)'
from (select 规格 from table group by 规格 group by 规格) aexec(@s+',单价'+ ' from table group by 类型,颜色,单价 WITH CUBE')
insert into t select '11','红','X ',2,3,6
insert into t select '11','红','L ',1,3,3
insert into t select '11','绿','XXL ',1,3,3
insert into t select '11','红','X ',1,3,3
insert into t select '22','绿','XXL ',1,4,4
insert into t select '22','绿','XXXL',1,4,4
insert into t select '22','黑','L ',1,4,4declare @s varchar(8000)
set @s='select (case when 类型 is null then ''合计'' when 颜色 is null then ''小计'' else 类型 end) as 类型,isnull(颜色,'''') as 颜色'
select @s=@s+',['+规格+']=sum(case 规格 when '''+规格+''' then 数量 else 0 end)'
from t group by 规格 order by 规格
set @s=@s+',[数量(小计)]=sum(数量),单价=max(单价),金额=sum(金额) from t group by 类型,颜色 with rollup'
exec(@s)/*
类型 颜色 L X XXL XXXL 数量(小计) 单价 金额
---------- ---------- ----------- ----------- ----------- ----------- ----------- ----------- -----------
11 红 1 3 0 0 4 3 12
11 绿 0 0 1 0 1 3 3
小计 1 3 1 0 5 3 15
22 黑 1 0 0 0 1 4 4
22 绿 0 0 1 1 2 4 8
小计 1 0 1 1 3 4 12
合计 2 3 2 1 8 4 27
*/drop table t
insert into t select '11','红','X ',2,3,6
insert into t select '11','红','L ',1,3,3
insert into t select '11','绿','XXL ',1,3,3
insert into t select '11','红','X ',1,3,3
insert into t select '22','绿','XXL ',1,4,4
insert into t select '22','绿','XXXL',1,4,4
insert into t select '22','黑','L ',1,4,4declare @s varchar(8000)
set @s='select (case when 类型 is null then ''合计'' when 颜色 is null then ''小计'' else 类型 end) as 类型,颜色'
select @s=@s+',['+规格+']=sum(case 规格 when '''+规格+''' then 数量 else 0 end)'
from t group by 规格 order by 规格
set @s=@s+',[数量(小计)]=sum(数量),单价,金额=sum(金额) from t group by 类型,颜色,单价 with rollup having grouping(单价)=0 or grouping(颜色)=1'
exec(@s)/*
类型 颜色 L X XXL XXXL 数量(小计) 单价 金额
---------- ---------- ----------- ----------- ----------- ----------- ----------- ----------- -----------
11 红 1 3 0 0 4 3 12
11 绿 0 0 1 0 1 3 3
小计 NULL 1 3 1 0 5 NULL 15
22 黑 1 0 0 0 1 4 4
22 绿 0 0 1 1 2 4 8
小计 NULL 1 0 1 1 3 NULL 12
合计 NULL 2 3 2 1 8 NULL 27
*/drop table t
咋不行啊,
说什么:
不能使用空白的对象或列名。如果必要,请使用一个空格。
--以后就可以用: exec 存储过程名 来调用create proc 存储过程名
as
set nocount on
declare @s varchar(8000)
set @s='select (case when 类型 is null then ''合计'' when 颜色 is null then ''小计'' else 类型 end) as 类型,颜色'
select @s=@s+',['+规格+']=sum(case 规格 when '''+规格+''' then 数量 else 0 end)'
from t group by 规格 order by 规格
set @s=@s+',[数量(小计)]=sum(数量),单价,金额=sum(金额) from t group by 类型,颜色,单价 with rollup having grouping(单价)=0 or grouping(颜色)=1'
exec(@s)