判断当前日期来决定是否执行sql 求助求助!!

瞬间 2012-04-27 10:45:41
做报表统计 查询条件是年份 如果是往年的记录就显示12个月份的记录 如果是今年的就显示当前月份之前的记录 我真的是没思路了 润乾报表 函数或是sql能解决问题的办法都可以

select distinct(quota.id),01 as month,quota.use_car_plan as use_car_plan,interior.sum_interior as sum_interior,exterior.sum_exterior
,jiedai.sum_jiedai,huiyi.sum_huiyi,peixun.sum_peixun,gongyong.sum_gongyong,total.total_sum from(
(select quota.dept_id as id ,quota.dept_name,quota.use_car_plan as use_car_plan from dept_quota quota
where quota.year=? and quota.dept_id=?)quota
left join
(select work.leader_dept_id as id, sum(work.total_fee) as sum_interior from car_apply_work work where work.leader_dept_id=? and substr
(work.ride_time,1,4)=?
and substr(work.ride_time,6,2)='01' and
work.dispatch_way='junei' and work.purpose='chailv'
and work.state='close'group by work.leader_dept_id) interior on
quota.id=interior.id


left join
(select work.leader_dept_id as id,sum(work.total_fee) as sum_exterior from car_apply_work work where work.leader_dept_id=? and
work.dispatch_way<> 'junei' and work.purpose='chailv'
and work.state='close' and substr(work.ride_time,6,2)='01'
and substr(work.ride_time,1,4)=?
group by work.leader_dept_id) exterior on quota.id=exterior.id

left join

(select work.leader_dept_id as id,sum(work.total_fee) as sum_jiedai from car_apply_work work where work.leader_dept_id=? and
work.purpose='jiedai'
and work.state='close' and substr(work.ride_time,6,2)='01'
and substr(work.ride_time,1,4)=? group by work.leader_dept_id) jiedai on quota.id=jiedai.id

left join
(select work.leader_dept_id as id,sum(work.total_fee) as sum_huiyi from car_apply_work work where work.leader_dept_id=? and
work.purpose='huiyi'
and work.state='close' and substr(work.ride_time,6,2)='01'
and substr(work.ride_time,1,4)=? group by work.leader_dept_id) huiyi on quota.id=huiyi.id

left join

(select work.leader_dept_id as id,sum(work.total_fee) as sum_peixun from car_apply_work work where work.leader_dept_id=? and
work.purpose='peixun'
and work.state='close' and substr(work.ride_time,6,2)='01'
and substr(work.ride_time,1,4)=? group by work.leader_dept_id) peixun on
quota.id=peixun.id
left join
(select work.leader_dept_id as id,sum(work.total_fee) as total_sum from car_apply_work work where work.leader_dept_id=?
and work.purpose='chailv'
and work.state='close' and substr(work.ride_time,6,2)<='01'
and substr(work.ride_time,1,4)=?
group by work.leader_dept_id) total on quota.id=total.id
left join

(select work.leader_dept_id as id,sum(work.total_fee) as sum_gongyong from car_apply_work work where work.leader_dept_id=? and
work.purpose='gongyong'
and work.state='close' and substr(work.ride_time,6,2)='01'
and substr(work.ride_time,1,4)=? group by work.leader_dept_id) gongyong on
quota.id=gongyong.id)

union all

select distinct(quota.id),02 as month,quota.use_car_plan as use_car_plan,interior.sum_interior as sum_interior,exterior.sum_exterior
,jiedai.sum_jiedai,huiyi.sum_huiyi,peixun.sum_peixun,gongyong.sum_gongyong ,total.total_sum from(
(select quota.dept_id as id ,quota.dept_name,quota.use_car_plan as use_car_plan from dept_quota quota
where quota.year=? and quota.dept_id=?)quota
left join
(select work.leader_dept_id as id, sum(work.total_fee) as sum_interior from car_apply_work work where work.leader_dept_id=? and substr
(work.ride_time,1,4)=?
and substr(work.ride_time,6,2)='02' and
work.dispatch_way='junei' and work.purpose='chailv'
and work.state='close'group by work.leader_dept_id) interior on
quota.id=interior.id


left join
(select work.leader_dept_id as id,sum(work.total_fee) as sum_exterior from car_apply_work work where work.leader_dept_id=? and
work.dispatch_way<> 'junei' and work.purpose='chailv'
and work.state='close' and substr(work.ride_time,6,2)='02'
and substr(work.ride_time,1,4)=?
group by work.leader_dept_id) exterior on quota.id=exterior.id

left join

(select work.leader_dept_id as id,sum(work.total_fee) as sum_jiedai from car_apply_work work where work.leader_dept_id=? and
work.purpose='jiedai'
and work.state='close' and substr(work.ride_time,6,2)='02'
and substr(work.ride_time,1,4)=? group by work.leader_dept_id) jiedai on quota.id=jiedai.id

left join
(select work.leader_dept_id as id,sum(work.total_fee) as sum_huiyi from car_apply_work work where work.leader_dept_id=? and
work.purpose='huiyi'
and work.state='close' and substr(work.ride_time,6,2)='02'
and substr(work.ride_time,1,4)=? group by work.leader_dept_id) huiyi on quota.id=huiyi.id

left join

(select work.leader_dept_id as id,sum(work.total_fee) as sum_peixun from car_apply_work work where work.leader_dept_id=? and
work.purpose='peixun'
and work.state='close' and substr(work.ride_time,6,2)='02'
and substr(work.ride_time,1,4)=? group by work.leader_dept_id) peixun on
quota.id=peixun.id
left join
(select work.leader_dept_id as id,sum(work.total_fee) as total_sum from car_apply_work work where work.leader_dept_id=?
and work.purpose='chailv'
and work.state='close' and substr(work.ride_time,6,2)<='02'
and substr(work.ride_time,1,4)=?
group by work.leader_dept_id) total on quota.id=total.id
left join

(select work.leader_dept_id as id,sum(work.total_fee) as sum_gongyong from car_apply_work work where work.leader_dept_id=? and
work.purpose='gongyong'
and work.state='close' and substr(work.ride_time,6,2)='02'
and substr(work.ride_time,1,4)=? group by work.leader_dept_id) gongyong on
quota.id=gongyong.id)
这是两个月的查询结果记录
...全文
245 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
瞬间 2012-05-01
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]
传入一个参数 年份 构造一个月份表来左联你的表 查询每月数据

SQL code


select to_char(add_months(to_date('2011'||'01-01','yyyy-mm-dd'),level-1),'yyyy-mm') mon
from dual
connect by level <= (select case when 2011=to_char(s……
[/Quote]
很感谢 刚看到 我是用报表函数实现此功能的
buryMyLove 2012-04-28
  • 打赏
  • 举报
回复
这一大堆SQL看的人眼晕……下面是按自己理解写的

-- 如果是往年的记录就显示12个月份的记录 如果是今年的就显示当前月份之前的记录,根据年份判断可以得出时间范围,一个开始时间,一个结束时间,以这两个时间作为条件查询
--例如传入年份year(格式yyyy)

--得到开始时间(闭区间):不管传入的是哪一年,肯定都是从传入年份的一月一日开始查
select to_date(year||'0101','yyyymmdd') from dual;

--得到结束时间(开区间):如果是往年,传入年份第二年的1月1日;如果是今年,本月1日
select decode(to_number(to_char(sysdate, 'yyyy')) - to_number(year),
0,
to_date(to_char(sysdate, 'yyyymm') || '01', 'yyyymmdd'),
to_date((to_number(year) + 1) || '0101', 'yyyymmdd'))
from dual;


--比如时间字段是time,where条件就是:

where time<decode(to_number(to_char(sysdate, 'yyyy')) - to_number(year),
0,
to_date(to_char(sysdate, 'yyyymm') || '01', 'yyyymmdd'),
to_date((to_number(year) + 1) || '0101', 'yyyymmdd'))
and time>=to_date(year||'0101','yyyymmdd')
瞬间 2012-04-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
应该也不用这么判断吧 如果数据库里面有时间字段 那直接根据月份统计下来就可以了 如果是2011年 每个月都有数据 那统计下来就是12个月 如果是今年 那肯定只有4个月的数据 只能统计到4个月咯
[/Quote]
我也这么想过 但是假如一月份的数据没有值查询结果为空 我得做处理 为空的设为0 所以就会导致本年大于当前月份的值也为0了
  • 打赏
  • 举报
回复
不知道这表是怎么设计的 怎么看着昏昏的哇 查询一个月要连接这么多次么
  • 打赏
  • 举报
回复
应该也不用这么判断吧 如果数据库里面有时间字段 那直接根据月份统计下来就可以了 如果是2011年 每个月都有数据 那统计下来就是12个月 如果是今年 那肯定只有4个月的数据 只能统计到4个月咯
nxvan 2012-04-27
  • 打赏
  • 举报
回复
好吧,,不知道是网页问题还是什么,我没看到LZ下面的一大串东西,,囧了
[Quote=引用 1 楼 的回复:]
如果表里面是时间字段
select * from tab where to_char(date,'yyyy') = 输入的年份;
这样是否可以
另外,头像哪儿来的呀,好萌的妹子
[/Quote]
nxvan 2012-04-27
  • 打赏
  • 举报
回复
如果表里面是时间字段
select * from tab where to_char(date,'yyyy') = 输入的年份;
这样是否可以
另外,头像哪儿来的呀,好萌的妹子
  • 打赏
  • 举报
回复
传入一个参数 年份 构造一个月份表来左联你的表 查询每月数据

select to_char(add_months(to_date('2011'||'01-01','yyyy-mm-dd'),level-1),'yyyy-mm') mon
from dual
connect by level <= (select case when 2011=to_char(sysdate,'yyyy') then to_number(to_char(sysdate,'mm')) else 12 end a from dual)


--参数2011
mon
-----------------
1 2011-01
2 2011-02
3 2011-03
4 2011-04
5 2011-05
6 2011-06
7 2011-07
8 2011-08
9 2011-09
10 2011-10
11 2011-11
12 2011-12


--参数2012
mon
-----------------
1 2012-01
2 2012-02
3 2012-03
4 2012-04

  • 打赏
  • 举报
回复
那试着用构造月份来关联表咯
zhaodan2000 2012-04-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
引用 3 楼 的回复:
应该也不用这么判断吧 如果数据库里面有时间字段 那直接根据月份统计下来就可以了 如果是2011年 每个月都有数据 那统计下来就是12个月 如果是今年 那肯定只有4个月的数据 只能统计到4个月咯

我也这么想过 但是假如一月份的数据没有值查询结果为空 我得做处理 为空的设为0 所以就会导致本年大于当前月份的值也为0了
[/Quote]
条件设成to_char(date,'yyyy-MM')<to_char(sysdate,'yyyy-MM')试试
forgetsam 2012-04-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

我也这么想过 但是假如一月份的数据没有值查询结果为空 我得做处理 为空的设为0 所以就会导致本年大于当前月份的值也为0了
[/Quote]

统计当然是连年带月一起统计。

你没表没数据,给个SQL有什么用,打几个田字格都能说明白的问题说不明白。
vf6.0,要考二级没系统的下哈 Microsoft Visual FoxPro 6.0 for Windows 的常见问题 这些是有关 Microsoft Visual FoxPro 最常见的问题。在您求助 Microsoft 产品支持服务之前,请先查阅这张列表。 若想打印这些附注,请从“文件”菜单中选择“打印”命令。此文档分为以下四部分: --------------------------------------------------------------------- 部分 1. 技术支持与市场 部分 2. Visual FoxPro 6.0 新增功能 部分 3. 从其他版本的 FoxPro 和 Visual FoxPro 中移植 部分 4. Visual FoxPro 常见问题 --------------------------------------------------------------------- 部分 1. 技术支持与市场 问题 1-1: 从何处可以获得产品的更新版本? 答案: 在 Visual FoxPro 的 Web 站点上即可获得产品的更新信息,其中包括有关 Service Pack 和更新的示例、向导及其他代码的信息,该站点的网址为: www.microsoft.com/vfoxpro 请定期查看该网站,以便下载产品的最新版本。 问题 1-2: 从何处可以得到有关 Visual FoxPro 的详细资料? 答案: 通过 Microsoft Visual FoxPro Web 站点是随时获得各种最新产品发布信息的最佳途径。在此站点上不仅有新的产品公告,而且还提供了产品的更新信息、技术文章、白皮书、专业开发人员设计的优秀示例、会议公告、以及与其他许多 FoxPro web 站点的各种链接。 问题 1-3: 如何获得技术支持,以及如何报告软件错误? 答案: Microsoft Visual FoxPro Web 站点已经链接到了多种联机支持选项,其中包括覆盖面广阔的有关所有产品 Microsoft Knowledge Base(Microsoft 知识库)。您还可以阅读一份有关常见问题的清单。除联机支持之外,还可以直接通过电话获得技术支持。“帮助”菜单中的选项可列出技术支持的电话号码。这些电话号码也可用于报告产品中的错误。 问题 1-4. 什么是 Knowledge Base?如何使用它? 答案: Knowledge Base 是内容广泛的论文集,覆盖了如何使用产品的各种特性、已知的软件错误及其解决方案或回避的方法、以及其他有助于使用各种 Microsoft 产品的有用信息。通过以下站点可访问整个 Knowledge Base: support.microsoft.com 问题 1-5: 是否会有 Visual FoxPro 6.0a? 答案: Microsoft 公司一向承诺为用户提供高质量的产品。如果确实需要,我们将提供 Visual FoxPro 6.0 的错误修订版。但是,修订版不会使用 6.0a 版的形式。Visual FoxPro 6.0 中任何错误的修正都将包含在 Visual Studio Service Pack 中。同时还会在 Visual FoxPro 的 www.microsoft.com/vfoxpro 或 Visual Studio 的www.microsoft.com/vstudio 的 Web 站点上发布修订公告。 问题 1-6: Microsoft 公司为应用程序的开发提供了一些优秀的解决方案。怎样才能知道应该向客户推荐和使用哪种产品? 答案: 在选择适用某项任务的产品时,需要考虑多方面的因素。Microsoft Visual FoxPro web 站点上有一份优秀的策略背景论文,它比较了 Visual FoxPro、Visual Basic、SQL Server 和 Access 等 Microsoft 产品之间的不同。 问题 1-7: 哪里可以找到 Visual FoxPro 的使用示例? 答案: Visual FoxPro 6.0 产品中带有丰富的示例,其中有一些是针对 6.0 版特有功能的新示例。与 Visual FoxPro 以前的版本不同,这些示例将与所有 Visual Studio 示例安装在一起。您必须运行 MSDN Library 的“自定义”安装来安装这些示例。在 Visual FoxPro 中可使用新的 HOME(2) 函数方便地找到已安装示例的位置。 除了产品中所自带的示例外,Microsoft Visual FoxPro web 站点还将经常提供新的示例。

3,494

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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