表一:
学生编号 项目编号 标准金额 实际金额 已收金额 托欠金额
10401001 1 ¥200.00 ¥200.00 ¥200.00 ¥0.00
10401001 2 ¥200.00 ¥200.00 ¥200.00 ¥0.00
10401001 3 ¥200.00 ¥200.00 ¥200.00 ¥0.00
10401001 4 ¥200.00 ¥200.00 ¥200.00 ¥0.00
10401002 1 ¥200.00 ¥200.00 ¥200.00 ¥0.00
10401002 3 ¥200.00 ¥200.00 ¥200.00 ¥0.00
10401002 4 ¥200.00 ¥200.00 ¥200.00 ¥0.00
表二:
项目编号 项目名称
1 代管费
2 住宿费
3 上机费
4 学费
要得到的查询结果:
学生编号 代管费 住宿费 上机费 学费 合计标准金额 合计实际金额 合计已收金额 合计托欠金额
10401001 200 200 200 200 800 800 800 0
10401002 200 0 200 200 600 600 600 0
向各位高手请教:应如何才能得到以上结果???
学生编号 项目编号 标准金额 实际金额 已收金额 托欠金额
10401001 1 ¥200.00 ¥200.00 ¥200.00 ¥0.00
10401001 2 ¥200.00 ¥200.00 ¥200.00 ¥0.00
10401001 3 ¥200.00 ¥200.00 ¥200.00 ¥0.00
10401001 4 ¥200.00 ¥200.00 ¥200.00 ¥0.00
10401002 1 ¥200.00 ¥200.00 ¥200.00 ¥0.00
10401002 3 ¥200.00 ¥200.00 ¥200.00 ¥0.00
10401002 4 ¥200.00 ¥200.00 ¥200.00 ¥0.00
表二:
项目编号 项目名称
1 代管费
2 住宿费
3 上机费
4 学费
要得到的查询结果:
学生编号 代管费 住宿费 上机费 学费 合计标准金额 合计实际金额 合计已收金额 合计托欠金额
10401001 200 200 200 200 800 800 800 0
10401002 200 0 200 200 600 600 600 0
向各位高手请教:应如何才能得到以上结果???
解决方案 »
- 怎样在delphi中调用打印对话框,来选择打印机?
- 40分~给前4位~
- 如何解决将delphi中的代码复制到文本中时中文显示乱码的问题?
- 数据库与delphi的连接绘制流程图问题
- 如何用sndPlaysound播放资源文件中的声音文件
- (Ado + Sql Server2000)数据库的自动刷新问题?
- 我有FastReport2.5封装的DLL,我功能太浅,想修改源码,解决自定义纸张问题
- 如何控制treeview的成员被选中时的图标!?
- 谁知道《Delphi COM深入编程》这本书的下载地址,麻烦你告诉我!
- 怎么在程序中调用系统默认函数form1click呢?共15分,希望有代码
- 超菜鸟级问题,哪位有空帮忙回复一下。不胜感谢!
- 關於創建一個模版窗口的多個實例?
select 学生编号,(select 已收金额 from 表1 where bh='1' ) as 代管费,(select 已收金额 from 表1 where bh='2' ) as 住宿费,(select 已收金额 from 表1 where bh='3' ) as 上机费,(select 已收金额 from 表1 where bh='4' ) as 学费 into temptable2 from 表1 group by 学生编号最后将两个表的列根据"学生编号"列连起来显示出来就可以了,如果表2时动态的,那么就动态组织第二个sql语句就是了
sum(case 项目编号 =1 then 标准金额 else 0) as 代管费,
sum(...)
from 表一
group by 学生编号见SQL SERVER help file
(学生编号 varchar(50),
项目编号 int,
标准金额 money,
实际金额 money,
已收金额 money,
拖欠金额 money)gocreate table table2
(项目编号 int,
项目名称 varchar(50))goinsert into table1
select '10401001',1, 200.00, 200.00, 200.00, 0.00
union select '10401001',2, 200.00, 200.00, 200.00, 0.00
union select '10401001',3, 200.00, 200.00, 200.00, 0.00
union select '10401001',4, 200.00, 200.00, 200.00, 0.00
union select '10401002',1, 200.00, 200.00, 200.00, 0.00
union select '10401002',3, 200.00, 200.00, 200.00, 0.00
union select '10401002',4, 200.00, 200.00, 200.00, 0.00
goinsert into table2
select 1, '代管费'
union select 2, '住宿费'
union select 3, '上机费'
union select 4, '学费'
goselect 学生编号,
sum(case when 项目编号 = 1 then 标准金额 else 0 end) as 代管费,
sum(case when 项目编号 = 2 then 标准金额 else 0 end) as 住宿费,
sum(case when 项目编号 = 3 then 标准金额 else 0 end) as 上机费,
sum(case when 项目编号 = 4 then 标准金额 else 0 end) as 学费,
sum(实际金额) as 合计实际金额,
sum(已收金额) as 合计已收金额,
sum(拖欠金额) as 合计拖欠金额
from table1
group by 学生编号查询结果:
10401001 200.00 200.00 200.00 200.00 800.00 800.00 .00
10401002 200.00 .00 200.00 200.00 600.00 600.00 .00不过这样感觉table2就没什么用了,当table2有变动时,需改sql语句,添加型如
sum(case when 项目编号 = n then 标准金额 else 0 end) as XX费,
的行
set @sql = ''
select @sql = @sql + ' sum(case when 项目编号 = ' + convert(varchar(20), 项目编号) +
' then 标准金额 else 0 end) as ' + 项目名称 + ','
from table2if (@sql <> '')
begin
set @sql = 'select 学生编号,' + @sql +
'sum(实际金额) as 合计实际金额,
sum(已收金额) as 合计已收金额,
sum(拖欠金额) as 合计拖欠金额
from table1
group by 学生编号'
exec(@sql)
end