散分了,又见sql语句,谢谢

qdmis123 2004-08-12 02:41:27
表1:
工号 姓名
11 aaa
22 bbb
表2:
工号 金额 时间
11 12.01 2004-1
11 13 2004-1
22 55 2004-3
22 78 2004-1
实现的功能是:
工号 姓名 发生金额
1月 2月 3月 4月。。。。
11 aaa 25.01 0 0 0。。。。
22 bbb 78 0 55 0。。。。
最好用一句sql语句,谢谢了

这个问题我刚在报表打印里提了,提错地方了,
所以提供有价值线索者,那里的100也是你的了,谢谢
...全文
401 46 打赏 收藏 转发到动态 举报
写回复
用AI写文章
46 条回复
切换为时间正序
请发表友善的回复…
发表回复
pcyy 2004-08-13
  • 打赏
  • 举报
回复
老问题
接分
jinjazz 2004-08-12
  • 打赏
  • 举报
回复
ok,楼主可以到oracle板块去了解一下decode以及其他oracle函数的用法,会有帮助的
qdmis123 2004-08-12
  • 打赏
  • 举报
回复
jinjazz(人雅的标记--落寞刺客)
请你到delphi打印/报表板块的下列两个问题中随便发言一下,我们会把那里的分数也一并给你。谢谢

?散分咯,又是sql语句问题。谢谢各位了(qdmis123)
?quickreport报表统计问题 300分(qdmis123)

hsmserver 2004-08-12
  • 打赏
  • 举报
回复
老问题
接分
fhuibo 2004-08-12
  • 打赏
  • 举报
回复
select distinct(b.gonghao),a.xingm,
(select sum(jine) from a2 where (gonghao = a.gonghao) and (riq >='2004-01-01') and (riq <'2004-02-01')) as '1月',
(select sum(jine) from a2 where (gonghao = a.gonghao) and (riq >='2004-02-01') and (riq <'2004-03-01')) as '2月',
(select sum(jine) from a2 where (gonghao = a.gonghao) and (riq >='2004-03-01') and (riq <'2004-04-01')) as '3月'
from a1 a,a2 b where a.gonghao = b.gonghao
qdmis2 2004-08-12
  • 打赏
  • 举报
回复
我要下班了,明天给你分,应该有300分吧,谢谢
jinjazz 2004-08-12
  • 打赏
  • 举报
回复
上面有误,把月份改改,我都是8月了

SQL>
SQL> select a.xm,a.gh,b.* from bb a,(
2 select gh,sum(m8),sum(m9),sum(m10) from(
3 select gh,je,
4 max(decode(trunc(sj, 'month'),to_date('2004-08-01','yyyy-mm-dd'),je,0)) m8,
5 max(decode(trunc(sj, 'month'),to_date('2004-09-01','yyyy-mm-dd'),je,0)) m9,
6 max(decode(trunc(sj, 'month'),to_date('2004-10-01','yyyy-mm-dd'),je,0)) m10
7 from(
8 select gh,sum(je) as je,sj
9 from aa group by gh,sj)
10 group by gh,je
11 )
12 group by gh) b
13 where a.gh=b.gh(+) ;

XM GH GH SUM(M8) SUM(M9) SUM(M10)
---------- ---------- ---------- ---------- ---------- ----------
aa 1 1 21 23 0
bb 2 2 3 1 0
cc 3

SQL>
jinjazz 2004-08-12
  • 打赏
  • 举报
回复
你的时间字段类型是date的话当然要转化了,其实到现在这个问题已经不是sql而是oracle函数的问题,你应该自己能够解决的,应为平时很多情况都回碰到类似的问题的


先用trunc函数取月份,再用to_date函数判断

完整过程:
Connected to Oracle8i Enterprise Edition Release 8.1.6.0.0
Connected as scott


SQL> select * from bb;

GH XM
---------- ----------
1 aa
2 bb
3 cc

SQL> select * from aa;

GH JE SJ
---------- ---------- -----------
2 3 2004-08-19
1 23 2004-09-07
2 1 2004-09-06
1 21 2004-08-11

SQL>
SQL> select a.xm,a.gh,b.* from bb a,(
2 select gh,sum(m8),sum(m9),sum(m10) from(
3 select gh,je,
4 max(decode(trunc(sj, 'month'),to_date('2004-08-01','yyyy-mm-dd'),je,0)) m8,
5 max(decode(trunc(sj, 'month'),to_date('2004-08-01','yyyy-mm-dd'),je,0)) m9,
6 max(decode(trunc(sj, 'month'),to_date('2004-08-01','yyyy-mm-dd'),je,0)) m10
7 from(
8 select gh,sum(je) as je,sj
9 from aa group by gh,sj)
10 group by gh,je
11 )
12 group by gh) b
13 where a.gh=b.gh(+) ;

XM GH GH SUM(M8) SUM(M9) SUM(M10)
---------- ---------- ---------- ---------- ---------- ----------
aa 1 1 21 21 21
bb 2 2 3 3 3
cc 3

SQL>

qdmis2 2004-08-12
  • 打赏
  • 举报
回复
和你的一样试了一下,可是sum(m)里都是零。为何?
qizhanfeng 2004-08-12
  • 打赏
  • 举报
回复
up
qdmis2 2004-08-12
  • 打赏
  • 举报
回复
SQL> select * from yb2 where c1='400002';

C1 C2 C3 C4 C5 D1 C6
-------- ------------ --------- --------- --------- ---------- ---------
400002 殷亨有 24 12 12 10-7月 -04 殷亨有
400002 殷亨有 88.64 12 12 12-8月 -04 殷亨有

时间需要转换吧,你刚才的语句执行完了以后统计不出来,可能就是时间的问题
谢谢你
13997105678
jinjazz 2004-08-12
  • 打赏
  • 举报
回复
oracle的外联接都显示null的,不会显示0,但是到dbgrid里可以显示0出来
jinjazz 2004-08-12
  • 打赏
  • 举报
回复
Connected to Oracle8i Enterprise Edition Release 8.1.6.0.0
Connected as scott


SQL> select * from bb;

GH XM
---------- ----------
1 aa
2 bb
3 cc

SQL> select * from aa;

GH JE SJ
---------- ---------- ----------
2 1 200401
1 21 200402
2 20 200403
1 32 200401

SQL>
SQL> select a.xm,b.* from bb a,(
2 select gh,sum(je),sum(m1),sum(m2),sum(m3) from(
3 select gh,je, max(decode(sj,'200401',je,0)) m1,
4 max(decode(sj,'200402',je,0)) m2,
5 max(decode(sj,'200403',je,0)) m3
6 from(
7 select gh,sum(je) as je,sj
8 from aa group by gh,sj)
9 group by gh,je
10 )
11 group by gh) b
12 where a.gh=b.gh(+)
13 ;

XM GH SUM(JE) SUM(M1) SUM(M2) SUM(M3)
---------- ---------- ---------- ---------- ---------- ----------
aa 1 53 32 21 0
bb 2 21 1 0 20
cc

SQL>
pbsql 2004-08-12
  • 打赏
  • 举报
回复
那就用左连接了:... left join ... on ...
qdmis2 2004-08-12
  • 打赏
  • 举报
回复
我是从两个库中取的。
从一中取工号和姓名,从二中取消费记录,如果没消费过,他也应该有记录
qdmis2 2004-08-12
  • 打赏
  • 举报
回复
SQL> select * from yb2 where C1='400002';

C1 C2 C3 C4 C5 D1 C6
400002 殷亨有 88.64 12 12 12-8月 -04 殷亨有
400002 殷亨有 24 12 12 10-7月 -04 殷亨有
400002 殷亨有 24 12 12 15-7月 -04 殷亨有
这是我消费库中的数据,查询结果应该是:
C1 C2 一月。。。。六月 七月 八月 。十二月
400002 殷亨有 0 0 0 0 0 0 24 12 0 0 0 0
如果一个人没消费过:则结果是:
400001 nnn 0 0 0 0 0 0 0 0 0 0 0 0 0
同一个人,同一个月消费金额(yb2.c4)的合计
jinjazz 2004-08-12
  • 打赏
  • 举报
回复
我以前也没这么做过,现在看来行列转换,在分组后行不多的情况下oracle的好像比mssql的还要容易些,不过如果很多行(成百)的话就麻烦了
jinjazz 2004-08-12
  • 打赏
  • 举报
回复
然后再进行一次求和,最后的语句应该是这样的,12个月的一次望上加
SQL>
SQL> select gh,sum(je),sum(m1),sum(m2),sum(m3),sum(m4) from(
2 select gh,je, max(decode(sj,'200401',je,0)) m1,
3 max(decode(sj,'200402',je,0)) m2,
4 max(decode(sj,'200403',je,0)) m3,
5 max(decode(sj,'200404',je,0)) m4
6 from(
7 select gh,sum(je) as je,sj
8 from aa group by gh,sj)
9 group by gh,je
10 )
11 group by gh
12 ;

GH SUM(JE) SUM(M1) SUM(M2) SUM(M3) SUM(M4)
---------- ---------- ---------- ---------- ---------- ----------
1 92 57 2 0 33
2 140 43 65 32 0

SQL>
qdmis2 2004-08-12
  • 打赏
  • 举报
回复
兄弟,我的qq是35998880,让我请你吃饭
jinjazz 2004-08-12
  • 打赏
  • 举报
回复
这个是4个月的数据,你看看,aa的三列是工号,金额,时间,大体和你的意思差不多

Connected to Oracle8i Enterprise Edition Release 8.1.6.0.0
Connected as scott


SQL> select * from aa;

GH JE SJ
---------- ---------- ----------
1 34 200401
2 43 200401
2 65 200402
1 2 200402
2 32 200403
1 33 200404
1 23 200401

7 rows selected

SQL>
SQL> select gh,je, max(decode(sj,'200401',je,0)) m1,
2 max(decode(sj,'200402',je,0)) m2,
3 max(decode(sj,'200403',je,0)) m3,
4 max(decode(sj,'200404',je,0)) m4
5 from(
6 select gh,sum(je) as je,sj
7 from aa group by gh,sj)
8 group by gh,je
9 ;

GH JE M1 M2 M3 M4
---------- ---------- ---------- ---------- ---------- ----------
1 2 0 2 0 0
1 33 0 0 0 33
1 57 57 0 0 0
2 32 0 0 32 0
2 43 43 0 0 0
2 65 0 65 0 0

6 rows selected

SQL>
加载更多回复(26)

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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