CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Oracle >  基础和管理

oracle中一个关于不同时间复合查询的请教!

楼主faintyzxm(faint)2002-08-20 10:52:35 在 Oracle / 基础和管理 提问

比如我有一个表tableA,其中字段数据如下  
  name       Anum       Bnum             Dtime  
  K11           10           2                 2002/02/03    
  F12           3             9                 2002/02/04        
  K11           4             3                 2002/02/10        
  K11           21           22               2002/02/12        
  F12           5             4                 2002/02/12                
  F12           12           12               2002/02/13  
  需要做如下统计查询:  
  设定一标准时间2002/02/11  
  对每个name的字段Anum,Bnum做如下统计:Anum查在标准时间之前<的记录和sum(Anum),Bnum查在标准时间后>=的记录和sum(Bnum),则可得到如下查询结果:  
  name           Anum                 Bnum  
  K11         10+4=14                 22      
  F12               3                     4+12=16  
   
  请问该如何写这个查询语句?若无法使用一个select语句表达出来,请帮忙写出复合查询的,即写成视图也行。  
  多谢了  
   
  问题点数:100、回复次数:7Top

1 楼hdkkk(Piggy)回复于 2002-08-20 11:11:34 得分 70

select   name,sum(anum),sum(bnum)   from(  
  select   name,anum,0   from   tablea   where   dtime<to_date('2002/02/11','yyyy'/mm/dd')  
  union  
  select   name,0,bnum   from   tablea   where   dtime>=to_date('2002/02/11','yyyy'/mm/dd'))  
  group   by   name;  
   
  Top

2 楼faintyzxm(faint)回复于 2002-08-20 11:13:08 得分 0

时间的比较不用细究,只需用Dtime>=LevelTime或Dtim<LevelTime就行Top

3 楼jlandzpa(jlandzpa)回复于 2002-08-20 11:18:58 得分 20

select   name,  
  sum(decode(sign(20020211   -   to_number(replace(Dtime,'/',''))),1,Anum,0))   Anum,  
  sum(decode(sign(20020211   -   to_number(replace(Dtime,'/',''))),1,0,bnum))   Bnum  
  from   tableA   group   by   name;  
   
  NAME                           ANUM               BNUM  
  ----------   ----------   ----------  
  F12                                   3                   16  
  K11                                 14                   22  
   
  已用时间:     00:   00:   00.20  
  11:09:19   jlanzpa817>Top

4 楼wujinbao(abao)回复于 2002-08-20 11:30:52 得分 10

select   name,  
  sum(case   to_char(Dtime,'yyyy-mm-dd')   <   '2002-02-11'   then   Anum),sum(case   to_char(Dtime,'yyyy-mm-dd')   >=   '2002-02-11'   then   Bnum)   from   tableA   group   by   name;  
   
  这只是个大概意思,没有建表测试。Top

5 楼faintyzxm(faint)回复于 2002-08-20 11:35:49 得分 0

为什么我的语句里面  
  select   name,sum(A),sum(B)   from(  
  select   name,anum   as   A,0   from   tablea   where   dtime<to_date('2002/02/11','yyyy'/mm/dd')  
  union  
  select   name,0,bnum   as   B   from   tablea   where   dtime>=to_date('2002/02/11','yyyy'/mm/dd'))  
  group   by   name  
  将提取的字段自定义其名as   A,B的时候,会出现无效列名?Top

6 楼faintyzxm(faint)回复于 2002-08-20 11:39:54 得分 0

搞定!  
  结贴!Top

7 楼jlandzpa(jlandzpa)回复于 2002-08-20 11:44:57 得分 0

select   name,  
  sum(decode(sign(20020211   -   to_number(replace(Dtime,'/',''))),1,Anum,0))   Anum,  
  sum(decode(sign(20020211   -   to_number(replace(Dtime,'/',''))),1,0,bnum))   Bnum  
  from   tableA   group   by   name;  
  Top

相关问题

  • 复合查询问题
  • 求复合查询语句
  • oracle 查询
  • 关于复合查询的问题
  • 关于复合查询的问题
  • 关于复合查询!在线等待!
  • 复合语句查询,帮帮忙
  • 复合查询,请高手帮忙
  • 请教一个复合查询~!
  • hibernate是否支持复合查询

关键词

  • 字段
  • 查询
  • 语句
  • anum
  • bnum
  • dtime
  • tablea
  • sum
  • 如下
  • 时间

得分解答快速导航

  • 帖主:faintyzxm
  • hdkkk
  • jlandzpa
  • wujinbao

相关链接

  • Oracle类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo