请教高手不一样的分类汇总,sql2000模式

sdmc01 2011-08-19 12:51:49
表T sql2000

ID clsID plu sale time
001 一级 1001 100 2011-01-01
001 一级 1002 50 2011-01-02
002 二级 1001 100 2011-02-01
002 二级 1003 10 2011-03-01
001 一级 1003 10 2011-04-01
003 二级 1002 50 2011-05-01

查询结果

XH ID clsID plu sale time
01 001 一级 1001 100 2011-01-01
02 001 一级 1002 50 2011-01-02
03 001 一级 1003 10 2011-04-01
小计 一级 160.00
04 002 二级 1001 100 2011-02-01
05 002 二级 1003 10 2011-03-01
06 003 二级 1002 50 2011-05-01
小计 二级 160.00

这个 小计 一级,二级 能显示出来吗,晕
...全文
129 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
叶子 2011-08-19
  • 打赏
  • 举报
回复

declare @t table (ID varchar(3),clsID varchar(4),plu varchar(8),sale int,time varchar(10))
insert into @t
select '001','一级',1001,100,'2011-01-01' union all
select '001','一级',1002,50,'2011-01-02' union all
select '002','二级',1001,100,'2011-02-01' union all
select '002','二级',1003,10,'2011-03-01' union all
select '001','一级',1003,10,'2011-04-01' union all
select '003','二级',1002,50,'2011-05-01'

select * from @t union all
select '小计',clsID,'',sum(sale),null from @t
group by clsID
order by clsid desc,ID
/*
ID clsID plu sale time
---- ----- -------- ----------- ----------
001 一级 1001 100 2011-01-01
001 一级 1002 50 2011-01-02
001 一级 1003 10 2011-04-01
小计 一级 160 NULL
002 二级 1001 100 2011-02-01
002 二级 1003 10 2011-03-01
003 二级 1002 50 2011-05-01
小计 二级 160 NULL
*/
sdmc01 2011-08-19
  • 打赏
  • 举报
回复

--maco_wang:我只对你说 强!!!

叶子 2011-08-19
  • 打赏
  • 举报
回复

declare @t table (ID varchar(3),clsID varchar(4),plu varchar(8),sale int,time varchar(10),lsh varchar(8))
insert into @t
select '001','一级',1001,100,'2011-01-01','00001' union all
select '001','一级',1002,50,'2011-01-02','00003' union all
select '002','二级',1001,100,'2011-02-01','00007' union all
select '002','二级',1003,10,'2011-03-01','00009' union all
select '001','一级',1003,10,'2011-04-01','00004' union all
select '003','二级',1002,50,'2011-05-01','00011'

select right('00000'+ltrim((select count(1) from @t where lsh<=a.lsh)),5) as xh,* from @t a union all
select '','小计',clsID,'',sum(sale),null,null from @t
group by clsID
order by clsid desc,ID
/*
xh ID clsID plu sale time lsh
---------- ---- ----- -------- ----------- ---------- --------
00001 001 一级 1001 100 2011-01-01 00001
00002 001 一级 1002 50 2011-01-02 00003
00003 001 一级 1003 10 2011-04-01 00004
小计 一级 160 NULL NULL
00004 002 二级 1001 100 2011-02-01 00007
00005 002 二级 1003 10 2011-03-01 00009
00006 003 二级 1002 50 2011-05-01 00011
小计 二级 160 NULL NULL
*/
--小F-- 2011-08-19
  • 打赏
  • 举报
回复
ltrim(right('10000'+lsh,5)
--小F-- 2011-08-19
  • 打赏
  • 举报
回复
2000用identity(int,1,1)
sdmc01 2011-08-19
  • 打赏
  • 举报
回复
ID clsID plu sale time lsh
001 一级 1001 100 2011-01-01 00001
001 一级 1002 50 2011-01-02 00002
002 二级 1001 100 2011-02-01 00003
002 二级 1003 10 2011-03-01 00004
001 一级 1003 10 2011-04-01 00005
003 二级 1002 50 2011-05-01 00006


我刚了解一点,sql2000下想自动增号,可能要有一列为不重复的值,我这个是有一个不重复的列lsh,为了简化我去掉了,现在加上好做了吗
sdmc01 2011-08-19
  • 打赏
  • 举报
回复
补4个0刚好 ,想看看您们是怎么做的,我到时再改
sdmc01 2011-08-19
  • 打赏
  • 举报
回复
只是为好看,也担心会出现导出如excel时不能自动01 02 03 ...10 11 这样,如果不好带就直接用1 2 3 4 ...10是可以的
叶子 2011-08-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 sdmc01 的回复:]
真快呀,但是还缺少序号那列,怎么加上呢
[/Quote]
为什么序号是01 02 而不是 1 2 ,如果是10呢? 100呢?

如果前面补零的话补几个,标准是什么?
sdmc01 2011-08-19
  • 打赏
  • 举报
回复
谢谢三楼回复,但我这是sql2000 下的,'ROW_NUMBER' 不是可以识别的 函数名。
快溜 2011-08-19
  • 打赏
  • 举报
回复
declare @t table (ID varchar(3),clsID varchar(4),plu varchar(8),sale int,time varchar(10))
insert into @t
select '001','一级',1001,100,'2011-01-01' union all
select '001','一级',1002,50,'2011-01-02' union all
select '002','二级',1001,100,'2011-02-01' union all
select '002','二级',1003,10,'2011-03-01' union all
select '001','一级',1003,10,'2011-04-01' union all
select '003','二级',1002,50,'2011-05-01'

select xh=ROW_NUMBER() over(order by ID),* from @t union all
select null,'小计',clsID,'',sum(sale),null from @t
group by clsID
order by clsid desc,ID

/*
(6 行受影响)
xh ID clsID plu sale time
-------------------- ---- ----- -------- ----------- ----------
1 001 一级 1001 100 2011-01-01
2 001 一级 1002 50 2011-01-02
3 001 一级 1003 10 2011-04-01
NULL 小计 一级 160 NULL
4 002 二级 1001 100 2011-02-01
5 002 二级 1003 10 2011-03-01
6 003 二级 1002 50 2011-05-01
NULL 小计 二级 160 NULL

(8 行受影响)
sdmc01 2011-08-19
  • 打赏
  • 举报
回复
真快呀,但是还缺少序号那列,怎么加上呢

27,579

社区成员

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

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