这样的结果怎样查询?急(高分相送)

BUILDDEV 2003-08-26 10:27:03
一记录电话费用表,主要字段有本机号、呼叫号(另一表有此号的类型:市话/国内/国际及 计费标准)、本机所在部门、费用、通话时间等等

欲得这样结果
部门1
总打出电话数 ** 总费用 **

市话 总打出电话数 ** 总费用 **
明细记录...
...
国内长途
总打出电话数 ** 总费用 **
明细记录...
...
国际长途

总打出电话数 ** 总费用 **
明细记录...
...

部门2 ...
....
...全文
47 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
BUILDDEV 2003-09-03
  • 打赏
  • 举报
回复
非常抱歉,现在才结贴,这一星期没有上网。
本贴分给大力与tj_dans,其他朋友的分在该问题的另一张贴中给。
yujohny 2003-08-26
  • 打赏
  • 举报
回复
用存储过程,先建个临时表,然后按要求一步一步插入临时记录
DECLARE @TempTable(部门,类别,本机号,呼叫号,通话时间,费用)
DECLARE @TempTable1(部门,类别,数量,费用)
DECLARE @TempTable2(部门,本机号,呼叫号,通话时间,费用)
DECLARE @TempTable3(ID(自动增加),部门)

INSERT @TempTable3(部门)
SELECT DISTINCT 部门 FROM 表名

INSERT @TempTable1(部门,类别,数量,费用)
SELECT a.部门,'市话',a.数量,a.费用
(SELECT 部门,COUNT(*) AS 数量, SUM(费用) AS 费用 FROM 表名
WHERE SUBSTRING(呼叫号,1,4) =SUBSTRING(本机号,1,4) GROUP BY 部门) a

再按市话的例子将“国内长途”、“国际长途”总费用插入到@TempTable1表里
然后将各个部门各个类别的明细记录插入@TempTable2
然后按@TempTable3的ID进行循环分别对每个部门插入数据到@TempTable
(列名是临时用的,不一定要拘束,你排列出你要的格式就行了)
txlicenhe 2003-08-26
  • 打赏
  • 举报
回复
虽然SQL可以实现,还是建议用前台报表工具处理。
愉快的登山者 2003-08-26
  • 打赏
  • 举报
回复
create table 电话费用表(
本机号 char(8),
拨出号 char(20),
呼叫类型 char(10),
费用 numeric(10,2),
部门 char(10))

insert 电话费用表 select '12345678','87654321','市话','23.12','部门1'
insert 电话费用表 select '12345678','87654321','市话','23.18','部门1'
insert 电话费用表 select '12345679','01087654321','国内长途','123.12','部门1'
insert 电话费用表 select '22345671','87654321','市话','21.12','部门2'
insert 电话费用表 select '22345672','02087654321','国内长途','323.12','部门2'
insert 电话费用表 select '22345678','00187654321','国际长途','1223.12','部门2'

select 部门,呼叫类型,本机号,拨出号,isnull(电话数,''),总费用,费用 from (
select 部门+(case 呼叫类型 when '市话' then '1' when '国内长途' then '2' else '3' end)+'1' 编号,' ' 部门,本机号,拨出号,'' 电话数,null 呼叫类型,'费用' 总费用,费用 from 电话费用表
union all
select 部门+(case 呼叫类型 when '市话' then '1' when '国内长途' then '2' else '3' end)+'0',' ','','总打出电话数',呼叫类型,count(*),'费用',sum(费用) from 电话费用表 group by 部门,呼叫类型
union all
select 部门+'00',部门,'','总打出电话数','',count(*),'费用',sum(费用) from 电话费用表 group by 部门
) A order by 编号


愉快的登山者


◢◣◢◣◢◣
愉快的登山者 2003-08-26
  • 打赏
  • 举报
回复
drop table 电话费用表
create table 电话费用表(
本机号 char(8),
拨出号 char(20),
呼叫类型 char(10),
费用 numeric(10,2),
部门 char(10))

insert 电话费用表 select '12345678','87654321','市话','23.12','部门1'
insert 电话费用表 select '12345678','87654321','市话','23.18','部门1'
insert 电话费用表 select '12345679','01087654321','国内长途','123.12','部门1'
insert 电话费用表 select '22345671','87654321','市话','21.12','部门2'
insert 电话费用表 select '22345672','02087654321','国内长途','323.12','部门2'
insert 电话费用表 select '22345678','00187654321','国际长途','1223.12','部门2'

drop table #t
create table #t(
编号 char(50),
部门 char(10),
本机号 char(12),
拨出号 char(20),
呼叫类型 char(10),
电话数 int,
总费用 char(6),
费用 numeric(10,2))

insert #t select 部门+(case 呼叫类型 when '市话' then '1' when '国内长途' then '2' else '3' end)+'1',' ',本机号,拨出号,'',null,'费用',费用 from 电话费用表
insert #t select 部门+(case 呼叫类型 when '市话' then '1' when '国内长途' then '2' else '3' end)+'0',' ','','总打出电话数',呼叫类型,count(*),'费用',sum(费用) from 电话费用表 group by 部门,呼叫类型
insert #t select 部门+'00',部门,'','总打出电话数','',count(*),'费用',sum(费用) from 电话费用表 group by 部门

select 部门,呼叫类型,本机号,拨出号,isnull(电话数,''),总费用,费用 from #t order by 编号

部门 呼叫类型 本机号 拨出号 总费用 费用
---------- ---------- ------------ -------------------- ----------- ------ ------------
部门1 总打出电话数 3 费用 169.42
市话 总打出电话数 2 费用 46.30
12345678 87654321 0 费用 23.12
12345678 87654321 0 费用 23.18
国内长途 总打出电话数 1 费用 123.12
12345679 01087654321 0 费用 123.12
部门2 总打出电话数 3 费用 1567.36
市话 总打出电话数 1 费用 21.12
22345671 87654321 0 费用 21.12
国内长途 总打出电话数 1 费用 323.12
22345672 02087654321 0 费用 323.12
国际长途 总打出电话数 1 费用 1223.12
22345678 00187654321 0 费用 1223.12

(所影响的行数为 13 行)



愉快的登山者


◢◣◢◣◢◣


愉快的登山者


◢◣◢◣◢◣
pengdali 2003-08-26
  • 打赏
  • 举报
回复
select * from (
select 本机所在部门,count(*) 总打出电话数,sum(费用) 总费用,本机所在部门 flag1,1 flag2
from 电话费用表 group by 本机所在部门

union all

select '市话',count(*) 总打出电话数,sum(费用) 总费用,本机所在部门 flag1,2 flag2
from 电话费用表 where 呼叫号 in (select 呼叫号 from 另一表 where 类型='市话') group by 本机所在部门

union all

select '国内',count(*) 总打出电话数,sum(费用) 总费用,本机所在部门 flag1,3 flag2
from 电话费用表 where 呼叫号 in (select 呼叫号 from 另一表 where 类型='国内') group by 本机所在部门

union all

select '国际',count(*) 总打出电话数,sum(费用) 总费用,本机所在部门 flag1,4 flag2
from 电话费用表 where 呼叫号 in (select 呼叫号 from 另一表 where 类型='国际') group by 本机所在部门

) tem order by flag1,flag2
hjb111 2003-08-26
  • 打赏
  • 举报
回复
创建视图!
愉快的登山者 2003-08-26
  • 打赏
  • 举报
回复
建议使用存储过程进行处理,将结果存放在临时表中,然后显示临时表结果。

愉快的登山者


◢◣◢◣◢◣
CrazyFor 2003-08-26
  • 打赏
  • 举报
回复
你要的是报表吧,用报表软件做吧,在底层做这么界面化的东西真是太复杂了.
CrazyFor 2003-08-26
  • 打赏
  • 举报
回复
你要的是报表吧,用报表软件做吧,在底层做这么界面化的东西真是太复杂了.
liuyun2003 2003-08-26
  • 打赏
  • 举报
回复
呵呵,这个用PB非常好解决。用SQL语句嘛,我想不来。帮你UP吧。

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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