客户 大类 数量 金额
张三 冬装 2 34
李四 冬装 23 90
王五 夏装 8 189
刘六 夏装 3 422一个大概这个样的记录表,要按大类分类汇总,并有一列计算每个客户在自己所属大类里的占比,要实现结果如下:客户 大类 数量 金额 大类占比
张三 冬装 2 34 27%
李四 冬装 23 90 73%
小计 冬装小计 25 124 17%
王五 夏装 8 189 31%
刘六 夏装 3 422 69%
小计 夏装小计 11 611 83%
合计 合计 36 735 100%就是张三客户的大类占比等于张三的金额除冬装小计金额
王五客户的大类占比等于王五的金额除夏装小计金额
冬装小计的大类占比等于冬装小计的的金额合计的金额分类汇总没有问题,但怎么求分类占比,求解!
张三 冬装 2 34
李四 冬装 23 90
王五 夏装 8 189
刘六 夏装 3 422一个大概这个样的记录表,要按大类分类汇总,并有一列计算每个客户在自己所属大类里的占比,要实现结果如下:客户 大类 数量 金额 大类占比
张三 冬装 2 34 27%
李四 冬装 23 90 73%
小计 冬装小计 25 124 17%
王五 夏装 8 189 31%
刘六 夏装 3 422 69%
小计 夏装小计 11 611 83%
合计 合计 36 735 100%就是张三客户的大类占比等于张三的金额除冬装小计金额
王五客户的大类占比等于王五的金额除夏装小计金额
冬装小计的大类占比等于冬装小计的的金额合计的金额分类汇总没有问题,但怎么求分类占比,求解!
解决方案 »
- 存储过程 调用 另外一个存储过程 的返回结果集
- 谁知道如何让数据库中的一个表中的的一个时间字段自动更新哪?是实时更新,
- sql 里 怎么把一列的值合并成一个字符串???
- 存储过程中能否用数组
- 笨鸟在存储过程的函数转换中遇到了问题,求高人指点啊~~~~
- 求高高手一条SQL语句啊!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!标题要长
- 对于同一个字段有多个相同的值,如何写查询语句让结果中只出现一个相同的数据
- 怎么在SQL SERVER 中建立表的关系
- 各位新年好! 请教高手,SQl SERVERS数据库备份和还原问题。
- 请问一句时间间隔的SQL语句
- 怎样继承(更新)合格的那科成绩?
- 亲们,这个字符能在sql2012中保存,但做为条件查询,却查不到,求教。
DROP TABLE table1
GO
CREATE TABLE table1 (客户 nvarchar(2), 大类 nvarchar(2), 数量 int, 金额 int)
GO
INSERT INTO table1
SELECT N'张三',N'冬装',2,34 UNION ALL
SELECT N'李四',N'冬装',23,90 UNION ALL
SELECT N'王五',N'夏装',8,189 UNION ALL
SELECT N'刘六',N'夏装',3,422--SELECT * FROM table1
GOWITH T (客户, 大类, 数量, 金额, g1, g2)
AS (SELECT 客户, 大类, SUM(数量) AS 数量,SUM(金额) AS 金额,
GROUPING(客户) g1,
GROUPING(大类) g2
FROM table1
GROUP BY 大类,客户 WITH ROLLUP
)
SELECT 客户, 大类, 数量, 金额,
CASE WHEN (g1=0) THEN
ROUND(Convert(real,金额)/(SELECT AVG(金额)
FROM T T1
WHERE T1.大类=T.大类
AND T1.g1 = 1
AND T1.g2 = 0)
,2)
WHEN (g1=1 AND g2=0) THEN
ROUND(Convert(real,金额)/(SELECT AVG(金额)
FROM T T2
WHERE T2.g1 = 1
AND T2.g2 = 1)
,2)
ELSE
1.0
END 大类占比
FROM T
客户 大类 数量 金额 大类占比
---- ---- ----------- ----------- ----------------------
王五 夏装 8 189 0.31
刘六 夏装 3 422 0.69
NULL 夏装 11 611 0.83
李四 冬装 23 90 0.73
张三 冬装 2 34 0.27
NULL 冬装 25 124 0.17
NULL NULL 36 735 1