挑战:用最简单的语句实现一个较复杂的多级数据分类汇总。

zhhfy 2005-07-29 01:37:55
现有一表(tb)如下:
id name parentid
1 a 0
2 b 0
3 c 1
4 d 1
5 e 2
6 f 2
7 g 3
8 h 3
另一张表(tb1)为:
id num
7 10
8 11
6 10
5 11
4 10

最后输出的结果应为(注意保持记录的顺序):
id name num
1 a 31
3 c 1
7 g 10
8 h 11
4 d 10
2 b 21
5 e 10
6 f 11

问题:如何实现以上的输出? 条件:语句尽量简单,可以用游标(但最好不用),能够适应更多级次类别的汇总.

...全文
219 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhhfy 2005-08-03
  • 打赏
  • 举报
回复
很不错!

还有更好的方法吗?
山林73 2005-07-29
  • 打赏
  • 举报
回复
试一试xml
子陌红尘 2005-07-29
  • 打赏
  • 举报
回复
以上用户定义函数适用于ID数据长度小于等于4,目录层次小于等于1000的情况,如果需要突破ID长度限制,请修改函数中如下代码,4代表长度。
set @ret = right('0000'+rtrim(@id),4)
子陌红尘 2005-07-29
  • 打赏
  • 举报
回复
--生成测试数据
create table t1(id int,name char(1),parentid int)
insert into t1 select 1,'a',0
insert into t1 select 2,'b',0
insert into t1 select 3,'c',1
insert into t1 select 4,'d',1
insert into t1 select 5,'e',2
insert into t1 select 6,'f',2
insert into t1 select 7,'g',3
insert into t1 select 8,'h',3

create table t2(id int,num int)
insert into t2 select 7,10
insert into t2 select 8,11
insert into t2 select 6,10
insert into t2 select 5,11
insert into t2 select 4,10
go

--创建用户定义函数
create function f_getNum(@id int)
returns varchar(4000)
as
begin
declare @ret varchar(4000),@pid int
set @ret = right('0000'+rtrim(@id),4)
while exists(select 1 from t1 where id=@id and parentid!=0)
begin
select @pid=parentid from t1 where id=@id and parentid!=0
set @id = @pid
set @ret = right('0000'+rtrim(@id),4)+@ret
end
return @ret
end
go


--执行查询
select
a.id,
a.name,
num = sum(b.num)
from
t1 a
left join
t2 b
on
dbo.f_getNum(b.id) like dbo.f_getNum(a.id)+'%'
group by
a.id,a.name
order by
dbo.f_getNum(a.id)


--输出结果:
id name num
---- ------ -----
1 a 31
3 c 21
7 g 10
8 h 11
4 d 10
2 b 21
5 e 10
6 f 11
Linux C 编程一站式学习 宋劲杉 目录 Linux C 编程一站式学习..............................................1 C 语言入门..........................................................5 第 1 章 程序的基本概念..........................................5 1.1. 程序和编程语言.............................................5 1.2. 自然语言和形式语言.........................................8 1.3. 程序的调试................................................10 1.4. 第一个程序................................................11 第 2 章 常量、变量和表达式.....................................15 2.1. 继续 Hello World ..........................................15 2.2. 常量......................................................18 2.3. 变量......................................................19 2.4. 赋值......................................................20 2.5. 表达式....................................................21 2.6. 字符类型与字符编码........................................24 第 3 章 简单函数...............................................26 3.1. 数学函数..................................................26 3.2. 自定义函数................................................28 3.3. 形参和实参................................................32 3.4. 局部变量与全局变量........................................34 第 4 章 分支语句...............................................40 4.1. if 语句...................................................40 4.2. if/else 语句..............................................42 4.3. 布尔代数..................................................44 4.4. switch 语句...............................................47 第 5 章 深入理解函数...........................................50 5.1. return 语句...............................................50 5.2. 增量式开发................................................53 5.3. 递归......................................................57 第 6 章 循环语句...............................................64 6.1. while 语句................................................64 6.2. do/while 语句.............................................66 6.3. for 语句............................
Visual C++程序开发范例宝典配套光盘,因大小受限,所以分成8部分上传,必须全部下载才能正常解压! 第1章 窗体与界面设计 1.1 菜单应用实例 实例001 在系统菜单中添加菜单项 实例002 带图标的程序菜单 实例003 根据表中数据动态生成菜单 实例004 浮动的菜单 1.2 弹出菜单应用实例 实例005 在控件上单击右键弹出菜单 实例006 个性化的弹出菜单 实例007 任务栏托盘弹出菜单 1.3 工具栏应用实例 实例008 带背景的工具栏 实例009 带图标的工具栏 实例010 带下拉菜单的工具栏 实例011 可调整按钮位置的工具栏 实例012 浮动工具栏 实例013 根据表中数据动态生成工具栏 实例014 具有提示功能的工具栏 1.4 状态栏应用实例 实例015 带进度条的状态栏 实例016 动画效果的状态栏 实例017 滚动字幕的状态栏 1.5 导航界面应用实例 实例018 Outlook导航界面 实例019 树状导航界面 实例020 按钮导航界面 实例021 类QQ导航菜单 1.6 界面窗体应用实例 实例022 背景为渐变色的程序界面 实例023 椭圆形的程序界面 实例024 自绘窗体界面 实例025 类似Windows XP的程序界面 实例026 窗体融合技术 实例027 限制对话框最大时的窗口大小 1.7 多媒体宣传光盘应用实例 实例028 多媒体宣传光盘主界面 实例029 自动运行的多媒体宣传光盘 1.8 多媒体触摸屏程序应用实例 实例030 采购中心多媒体触摸屏程序 实例031 为触摸屏程序添加虚拟键盘 1.9 窗体位置应用实例 实例032 不可移动的窗体 实例033 始终在最上面的窗体 实例034 动画显示窗体 实例035 以时钟显示界面窗体 1.10 窗体标题栏应用实例 实例036 闪烁的窗体标题栏 实例037 拖动没有标题栏的窗体 实例038 禁用标题栏上的最大化、最小化或关闭按钮 1.11 窗体形状及应用 实例039 半透明窗体 实例040 创建字型窗体 实例041 百叶窗窗体 实例042 类似Office助手 第2章 控件应用 2.1 按钮控件典型实例 实例043 AVI动画按钮 实例044 GIF动画按钮 实例045 图文按钮 实例046 不规则按钮 2.2 EditBox控件典型实例 实例047 为EditBox设置新的系统菜单 实例048 为EditBox控件添加列表选择框 实例049 多彩边框的编辑框 实例050 改变编辑框文本颜色 2.3 ListBox控件典型实例 实例051 利用ListBox控件实现标签式数据选择 实例052 在ListBox控件间实现数据交换 实例053 列表项的提示条 2.4 ComboBox控件典型实例 实例054 将数据表中的字段添加到ComboBox控件 实例055 带查询功能的ComboBox控件 实例056 自动调整组合框的宽度 实例057 颜色组合框 实例058 多列显示的组合框 2.5 ListControl控件典型实例 实例059 将数据库中的数据表添加到ListControl控件 实例060 利用ListControl控件浏览数据 实例061 利用ListControl控件制作导航界面 实例062 在列表视图中拖动视图项 实例063 利用列标题对列表视图进行数据排序 实例064 具有文本录入功能的ListControl控件 2.6 TreeControl控件典型实例 实例065 多级数据库树状结构数据显示 实例066 可动态修改节点的树状结构 实例067 带复选功能的树状结构 实例068 显示磁盘目录 实例069 树型提示框 2.7 RichEdit控件典型实例 实例070 利用RichEdit显示Word文档 实例071 利用RichEdit控件实现文字定位与标识 实例072 利用RichEdit控件显示图文数据 2.8 图形类控件典型实例 实例073 图文数据录入 实例074 带有滚动条的图形控件 2.9 滚动条控件典型实例 实例075 自定义滚动条控件 2.10 控件数组典型实例 实例076 向窗体中动态添加控件 实例077 公交线路模拟 第3章 图形技术 3.1 绘制图形 实例078 绘制正弦曲线 实例079 绘制艺术图案 实例080 画图程序 实例081 绘制立体模型 实例082 利用IFS算法绘制自然景物 3.2 图像预览 实例083 图片自动预览程序 实例084 图片批量浏览 实例085 浏览大幅BMP图片 实例086 放大和缩小图片 实例087 可随鼠标移动的图形 实例088 随图像大小变换的图像浏览器 3.3 图片效果 实例089 图片马赛克效果 实例090 图片百叶窗效果 实例091 电影胶片特效 实例092 翻
Visual C++程序开发范例宝典配套光盘,因大小受限,所以分成8部分上传,必须全部下载才能正常解压! 第1章 窗体与界面设计 1.1 菜单应用实例 实例001 在系统菜单中添加菜单项 实例002 带图标的程序菜单 实例003 根据表中数据动态生成菜单 实例004 浮动的菜单 1.2 弹出菜单应用实例 实例005 在控件上单击右键弹出菜单 实例006 个性化的弹出菜单 实例007 任务栏托盘弹出菜单 1.3 工具栏应用实例 实例008 带背景的工具栏 实例009 带图标的工具栏 实例010 带下拉菜单的工具栏 实例011 可调整按钮位置的工具栏 实例012 浮动工具栏 实例013 根据表中数据动态生成工具栏 实例014 具有提示功能的工具栏 1.4 状态栏应用实例 实例015 带进度条的状态栏 实例016 动画效果的状态栏 实例017 滚动字幕的状态栏 1.5 导航界面应用实例 实例018 Outlook导航界面 实例019 树状导航界面 实例020 按钮导航界面 实例021 类QQ导航菜单 1.6 界面窗体应用实例 实例022 背景为渐变色的程序界面 实例023 椭圆形的程序界面 实例024 自绘窗体界面 实例025 类似Windows XP的程序界面 实例026 窗体融合技术 实例027 限制对话框最大时的窗口大小 1.7 多媒体宣传光盘应用实例 实例028 多媒体宣传光盘主界面 实例029 自动运行的多媒体宣传光盘 1.8 多媒体触摸屏程序应用实例 实例030 采购中心多媒体触摸屏程序 实例031 为触摸屏程序添加虚拟键盘 1.9 窗体位置应用实例 实例032 不可移动的窗体 实例033 始终在最上面的窗体 实例034 动画显示窗体 实例035 以时钟显示界面窗体 1.10 窗体标题栏应用实例 实例036 闪烁的窗体标题栏 实例037 拖动没有标题栏的窗体 实例038 禁用标题栏上的最大化、最小化或关闭按钮 1.11 窗体形状及应用 实例039 半透明窗体 实例040 创建字型窗体 实例041 百叶窗窗体 实例042 类似Office助手 第2章 控件应用 2.1 按钮控件典型实例 实例043 AVI动画按钮 实例044 GIF动画按钮 实例045 图文按钮 实例046 不规则按钮 2.2 EditBox控件典型实例 实例047 为EditBox设置新的系统菜单 实例048 为EditBox控件添加列表选择框 实例049 多彩边框的编辑框 实例050 改变编辑框文本颜色 2.3 ListBox控件典型实例 实例051 利用ListBox控件实现标签式数据选择 实例052 在ListBox控件间实现数据交换 实例053 列表项的提示条 2.4 ComboBox控件典型实例 实例054 将数据表中的字段添加到ComboBox控件 实例055 带查询功能的ComboBox控件 实例056 自动调整组合框的宽度 实例057 颜色组合框 实例058 多列显示的组合框 2.5 ListControl控件典型实例 实例059 将数据库中的数据表添加到ListControl控件 实例060 利用ListControl控件浏览数据 实例061 利用ListControl控件制作导航界面 实例062 在列表视图中拖动视图项 实例063 利用列标题对列表视图进行数据排序 实例064 具有文本录入功能的ListControl控件 2.6 TreeControl控件典型实例 实例065 多级数据库树状结构数据显示 实例066 可动态修改节点的树状结构 实例067 带复选功能的树状结构 实例068 显示磁盘目录 实例069 树型提示框 2.7 RichEdit控件典型实例 实例070 利用RichEdit显示Word文档 实例071 利用RichEdit控件实现文字定位与标识 实例072 利用RichEdit控件显示图文数据 2.8 图形类控件典型实例 实例073 图文数据录入 实例074 带有滚动条的图形控件 2.9 滚动条控件典型实例 实例075 自定义滚动条控件 2.10 控件数组典型实例 实例076 向窗体中动态添加控件 实例077 公交线路模拟 第3章 图形技术 3.1 绘制图形 实例078 绘制正弦曲线 实例079 绘制艺术图案 实例080 画图程序 实例081 绘制立体模型 实例082 利用IFS算法绘制自然景物 3.2 图像预览 实例083 图片自动预览程序 实例084 图片批量浏览 实例085 浏览大幅BMP图片 实例086 放大和缩小图片 实例087 可随鼠标移动的图形 实例088 随图像大小变换的图像浏览器 3.3 图片效果 实例089 图片马赛克效果 实例090 图片百叶窗效果 实例091 电影胶片特效 实例092 翻
此文件分为2部分 part1 = http://download.csdn.net/source/2362571 含本书全部源码(1-16章) 共399个实例:第1章 窗体与界面设计  1.1 菜单应用实例  cc实例001 在系统菜单中添加菜单项  cc实例002 带图标的程序菜单   cc实例003 根据表中数据动态生成菜单  cc实例004 浮动的菜单  1.2 弹出菜单应用实例  cc实例005 在控件上单击右键弹出菜单  cc实例006 个性化的弹出菜单  cc实例007 任务栏托盘弹出菜单  1.3 工具栏应用实例  cc实例008 带背景的工具栏  cc实例 009 带图标的工具栏  cc实例010 带下拉菜单的工具栏  cc实例011 可调整按钮位置的工具栏  cc实例012 浮动工具栏  cc实例 013 根据表中数据动态生成工具栏  cc实例014 具有提示功能的工具栏  1.4 状态栏应用实例  cc实例015 带进度条的状态栏  cc 实例016 动画效果的状态栏  cc实例017 滚动字幕的状态栏  1.5 导航界面应用实例  cc实例018 Outlook导航界面  cc实例019 树状导航界面  cc实例020 按钮导航界面  cc实例021 类QQ导航菜单  1.6 界面窗体应用实例  cc实例022 背景为渐变色的程序界面  cc实例023 椭圆形的程序界面  cc实例024 自绘窗体界面  cc实例025 类似WindowscXP的程序界面  cc 实例026 窗体融合技术  cc实例027 限制对话框最大时的窗口大小  1.7 多媒体宣传光盘应用实例  cc实例028 多媒体宣传光盘主界面  cc实例029 自动运行的多媒体宣传光盘  1.8 多媒体触摸屏程序应用实例  cc实例030 采购中心多媒体触摸屏程序  cc实例031 为触摸屏程序添加虚拟键盘  1.9 窗体位置应用实例  cc实例032 不可移动的窗体  cc实例033 始终在最上面的窗体  cc实例034 动画显示窗体  cc实例035 以时钟显示界面窗体  1.10 窗体标题栏应用实例  cc实例036 闪烁的窗体标题栏  cc实例037 拖动没有标题栏的窗体  cc实例038 禁用标题栏上的最大化.c最小化或关闭按钮  1.11 窗体形状及应用  cc实例039 半透明窗体  cc实例 040 创建字型窗体  cc实例041 百叶窗窗体  cc实例042 类似Office助手 第2章 控件应用  2.1 按钮控件典型实例  cc 实例043 AVI动画按钮  cc实例044 GIF动画按钮  cc实例045 图文按钮  cc实例046 不规则按钮  2.2 EditBox 控件典型实例  cc实例047 为EditBox设置新的系统菜单  cc实例048 为EditBox控件添加列表选择框  cc实例049 多彩边框的编辑框  cc实例050 改变编辑框文本颜色  2.3 ListBox控件典型实例  cc实例051 利用ListBox控件实现标签式数据选择  cc实例052 在ListBox控件间实现数据交换  cc实例053 列表项的提示条  2.4 ComboBox控件典型实例  cc实例 054 将数据表中的字段添加到ComboBox控件  cc实例055 带查询功能的ComboBox控件  cc实例056 自动调整组合框的宽度  cc实例057 颜色组合框  cc实例058 多列显示的组合框  2.5 ListControl控件典型实例  cc实例059 将数据库中的数据表添加到ListControl控件  cc实例060 利用ListControl控件浏览数据  cc实例061 利用ListControl控件制作导航界面  cc实例062 在列表视图中拖动视图项  cc实例063 利用列标题对列表视图进行数据排序  cc实例064 具有文本录入功能的 ListControl控件  2.6 TreeControl控件典型实例  cc实例065 多级数据库树状结构数据显示  cc实例066 可动态修改节点的树状结构  cc实例067 带复选功能的树状结构  cc实例068 显示磁盘目录  cc实例069 树型提示框  2.7  RichEdit控件典型实例  cc实例070 利用RichEdit显示Word文档  cc实例071 利用RichEdit控件实现文字定位与标识  cc实例072 利用RichEdit控件显示图文数据  2.8 图形类控件典型实例  cc实例073 图文数据录入  cc实例074 带有滚动条的图形控件  2.9 滚动条控件典型实例  cc实例075 自定义滚动条控件  2.10 控件

27,580

社区成员

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

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