如何实现下面的查询

bdmh
移动开发领域优质创作者
博客专家认证
2008-11-14 09:45:32
code price
--------- -----------
A 100
B 200
使用 select code,sum(price) as total from 表名 group by code with rollup 后得到
code price
--------- -----------
A 100
B 200
null 300
我想要的结果如下,在每一类code下有一小计,如何实现
code price
--------- -----------
A 100
null 100
B 200
null 200
null 300
...全文
146 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
jlh7758258 2008-11-14
  • 打赏
  • 举报
回复
学习5楼
qizhengsheng 2008-11-14
  • 打赏
  • 举报
回复
又学习了
qizhengsheng 2008-11-14
  • 打赏
  • 举报
回复
select code ,sum(price) FROM @T1 group by code,PRICE WITH ROLLUP
yeinuse 2008-11-14
  • 打赏
  • 举报
回复
两行肯定不能达到你的要求。你可以做个自增列,达到预期的效果,至于,输入到界面时,可以隐藏掉的呀。

DECLARE @t TABLE(id varchar(10),code varchar(10),price int)
insert @t select '1','A',100
UNION ALL select '2','A',200
UNION ALL select '3','B',200
UNION ALL select '4','B',200

select * from @t
select case when grouping(code)=1 then '合计' when grouping(code)=0 and grouping(id)=1 then '小计' else ISNULL(code, 'UNKNOWN') end as code,
case when grouping(id)=1 then null else ISNULL(id, 'UNKNOWN') end as id,
sum(price) as total
from @t group by code,id with rollup

结果如下:
code id total
---------- ---------- -----------
A 1 100
A 2 200
小计 NULL 300
B 3 200
B 4 200
小计 NULL 400
合计 NULL 700
lemontreelau 2008-11-14
  • 打赏
  • 举报
回复
帮顶
pengxuan 2008-11-14
  • 打赏
  • 举报
回复
期待高手
bdmh 2008-11-14
  • 打赏
  • 举报
回复
你的代码我知道,GROUP BY Groups,Item,Color,这里有三个字段,我现在只有一个字段,就不能出现小计了,怎样在只按一个字段汇总时也显示小计
qizhengsheng 2008-11-14
  • 打赏
  • 举报
回复
借用老大的代码

DECLARE @t TABLE(Groups char(2),Item varchar(10),Color varchar(10),Quantity int)
INSERT @t SELECT 'aa','Table','Blue', 124
UNION ALL SELECT 'bb','Table','Red', -23
UNION ALL SELECT 'bb','Cup' ,'Green',-23
UNION ALL SELECT 'aa','Chair','Blue', 101
UNION ALL SELECT 'aa','Chair','Red', -90

--汇总显示
SELECT Groups=CASE
WHEN GROUPING(Color)=0 THEN Groups
WHEN GROUPING(Groups)=1 THEN '总计'
ELSE '' END,
Item=CASE
WHEN GROUPING(Color)=0 THEN Item
WHEN GROUPING(Item)=1 AND GROUPING(Groups)=0 THEN Groups+' 合计'
ELSE '' END,
Color=CASE
WHEN GROUPING(Color)=0 THEN Color
WHEN GROUPING(Color)=1 AND GROUPING(Item)=0 THEN Item+' 小计'
ELSE '' END,
Quantity=SUM(Quantity)
FROM @t
GROUP BY Groups,Item,Color WITH ROLLUP
/*--结果
Groups Item Color Quantity
-------- ---------------- ---------------------- -----------
aa Chair Blue 101
aa Chair Red -90
Chair 小计 11
aa Table Blue 124
Table 小计 124
aa 合计 135
bb Cup Green -23
Cup 小计 -23
bb Table Red -23
Table 小计 -23
bb 合计 -46
总计 89
--*/

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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