分组统计sql-技术题+急

isxiaoming 2011-03-10 04:32:05
A表按照3个字段分组,计算sum.

select SC_SS,SD_SS,MC_NAME,count(*) from SI_BASIC_INFO sb
left outer join SI_MCNAME sm on sb.NM_DEV=sm.MC_ID
left outer join SI_DIQ sd on sb.CD_AREA=sd.SD_SSDH
left outer join SI_CITY sc on sb.SBI_CCOUNTY=sc.SC_SSDH
group by SC_SS,SD_SS,MC_NAME
order by SC_SS,SD_SS,MC_NAME
------------------------------------------
NULL 杭州 LP7700 2
NULL 杭州 SP2000 1
NULL 杭州 SP3000 1
NULL 上海 DIC 57
NULL 上海 DPC 38
NULL 上海 DPS 2
NULL 北京 FMPC 43
NULL 北京 FP563FA 1
NULL 北京 LP1500SC 77
--------------------------------------------想到达的数据样式
NULL 杭州 LP7700 2
NULL 杭州 SP2000 1
NULL 杭州 SP3000 1
合计 合计 合计 4
NULL 上海 DIC 57
NULL 上海 DPC 38
NULL 上海 DPS 2
合计 合计 合计 97
NULL 北京 FMPC 43
NULL 北京 FP563FA 1
NULL 北京 LP1500SC 77
合计 合计 合计 121
合计 合计 合计 222
----------------------------------
要用SQL后台完成的是:
分组插入到临时表后,然后计算每个组的合计值在插入临时表(顺序很重要,每个组的合计在对应的位置,不然页面加载就会很乱 没规律)
比如NULL的合计是多少,杭州的为多少,上海的多少。

然后用页面加载这个临时表,出现数据。
...全文
136 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
isxiaoming 2011-03-15
  • 打赏
  • 举报
回复
在计算对应比例呢

但是想追问一下。。我要计算比率这么加呢??

比如我要算
每个细项占总和的比例??
2级细项占总和的比例??
isxiaoming 2011-03-11
  • 打赏
  • 举报
回复
5楼大哥,我知道你的意思。可以完成,

但是想追问一下。。我要计算比率这么加呢??

比如我要算
每个细项占总和的比例??
2级细项占总和的比例??
小童 2011-03-11
  • 打赏
  • 举报
回复
id                                                 dq                                                 dm                                                 xh
-------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -----------
NULL 杭州 LP7700 2
NULL 杭州 SP2000 1
NULL 杭州 SP3000 1
NULL 上海 DIC 57
NULL 上海 DPC 38
NULL 上海 DPS 2
NULL 北京 FMPC 43
NULL 北京 FP563FA 1
NULL 北京 LP1500SC 77


select dq,dm,sum(xh) as xh from t group by dq,dm
union all
select dq+'合计','',sum(xh) as xh from t group by dq
order by dq
dq                                                     dm                                                 xh
------------------------------------------------------ -------------------------------------------------- -----------
北京 FMPC 43
北京 FP563FA 1
北京 LP1500SC 77
北京合计 121
杭州 LP7700 2
杭州 SP2000 1
杭州 SP3000 1
杭州合计 4
上海 DIC 57
上海 DPC 38
上海 DPS 2
上海合计 97
mssql2013 2011-03-11
  • 打赏
  • 举报
回复
SELECT A,B,C,SUM(D) FROM TABLE GROUP A,B,C WHITH ROLLUP
XX1234567890AA 2011-03-10
  • 打赏
  • 举报
回复
顶5楼一下:

SELECT a,b, SUM(c) as c
FROM tbtest

GROUP BY a,b WITH ROLLUP
--================================

a b c
北京 FMPC 43
北京 FP563FA 1
北京 LP1500SC 77
北京 NULL 121
杭州 LP7700 2
杭州 SP2000 1
杭州 SP3000 1
杭州 NULL 4
上海 DIC 57
上海 DPC 38
上海 DPS 2
上海 NULL 97
NULL NULL 222
So_CooL 2011-03-10
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 freetd 的回复:]
用 ROLLUP 汇总数据
在生成包含小计和合计的报表时,ROLLUP 运算符很有用。ROLLUP 运算符生成的结果集类似于 CUBE 运算符所生成的结果集。有关更多信息,请参见用 CUBE 汇总数据。

CUBE 和 ROLLUP 之间的区别在于:

CUBE 生成的结果集显示了所选列中值的所有组合的聚合。


ROLLUP 生成的结果集显示了所选列中值的某一层次结构的聚合。……
[/Quote]
up
XX1234567890AA 2011-03-10
  • 打赏
  • 举报
回复
希望可以帮得上你.

;with tb as
(
select '杭州' a, 'LP7700' b, 2 c union all
select '杭州', 'SP2000', 1 union all
select '杭州', 'SP3000', 1 union all
select '上海', 'DIC', 57 union all
select '上海', 'DPC', 38 union all
select '上海', 'DPS', 2 union all
select '北京', 'FMPC', 43 union all
select '北京', 'FP563FA', 1 union all
select '北京', 'LP1500SC', 77
)
select * into tbtest from tb
select a,b,c from tbtest


union all
select a,'合计' b ,sum(c) from tbtest
group by a
union all
select null a,'合计' b,sum(c) from tbtest
order by a desc

--=========================================================
a b c
上海 DIC 57
上海 DPC 38
上海 DPS 2
上海 合计 97
杭州 LP7700 2
杭州 SP2000 1
杭州 SP3000 1
杭州 合计 4
北京 FMPC 43
北京 FP563FA 1
北京 LP1500SC 77
北京 合计 121
NULL 合计 222
freetd 2011-03-10
  • 打赏
  • 举报
回复
用 ROLLUP 汇总数据
在生成包含小计和合计的报表时,ROLLUP 运算符很有用。ROLLUP 运算符生成的结果集类似于 CUBE 运算符所生成的结果集。有关更多信息,请参见用 CUBE 汇总数据。

CUBE 和 ROLLUP 之间的区别在于:

CUBE 生成的结果集显示了所选列中值的所有组合的聚合。


ROLLUP 生成的结果集显示了所选列中值的某一层次结构的聚合。
例如,简单表 Inventory 中包含:

Item Color Quantity
-------------------- -------------------- --------------------------
Table Blue 124
Table Red 223
Chair Blue 101
Chair Red 210

下列查询将生成小计报表:

SELECT CASE WHEN (GROUPING(Item) = 1) THEN 'ALL'
ELSE ISNULL(Item, 'UNKNOWN')
END AS Item,
CASE WHEN (GROUPING(Color) = 1) THEN 'ALL'
ELSE ISNULL(Color, 'UNKNOWN')
END AS Color,
SUM(Quantity) AS QtySum
FROM Inventory
GROUP BY Item, Color WITH ROLLUP

Item Color QtySum
-------------------- -------------------- --------------------------
Chair Blue 101.00
Chair Red 210.00
Chair ALL 311.00
Table Blue 124.00
Table Red 223.00
Table ALL 347.00
ALL ALL 658.00

(7 row(s) affected)

如果查询中的 ROLLUP 关键字更改为 CUBE,那么 CUBE 结果集与上述结果相同,只是在结果集的末尾还会返回下列两行:

ALL Blue 225.00
ALL Red 433.00


--------以上引用2000联机丛书

这个符合你的要求不?
isxiaoming 2011-03-10
  • 打赏
  • 举报
回复
因为前台程序li 整理太乱了。所以想后台SQL写好 避免影响效率。。

那位大哥帮帮忙啊。
gogodiy 2011-03-10
  • 打赏
  • 举报
回复
这个应该是前台程序是实现的
cutebear2008 2011-03-10
  • 打赏
  • 举报
回复
这个应该在程序里面去实现的啊!
jiangshun 2011-03-10
  • 打赏
  • 举报
回复
rollup

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧