如:
--存储过程
create procedure REPORTVIEWER_count_type_proc
(@year int,@month int,@daty int) 
as 
begin 
select y_num_e,m_num_e,d_num_e,m_num_s,y_num_zf,m_num_zf,r_title from
(
--年-完成
select distinct  a.r_title,b.rdlc_num y_num_e,null m_num_e,null d_num_e,null m_num_s,null y_num_zf,null m_num_zf
from REPORTVIEWER a 
inner join 
(select sum(rdlc_num) as rdlc_num,rdlc_id,user_id from REPORTVIEWER_count d
where to_char(d.create_date,'yyyy')=@year group by rdlc_id,user_id) b 
on b.rdlc_id=a.sid 
inner join s_hse_ticket e on e.reghumsid=b.user_id
where e.erifystate='完成'
union all
--月-完成
select distinct  a.r_title,null y_num_e,b.rdlc_num  m_num_e,null d_num_e,null m_num_s,null y_num_zf,null m_num_zf
from REPORTVIEWER a 
inner join 
(select sum(rdlc_num) as rdlc_num,rdlc_id,user_id from REPORTVIEWER_count d
where to_char(d.create_date,'mm')=@month group by rdlc_id,user_id) b 
on b.rdlc_id=a.sid 
inner join s_hse_ticket e on e.reghumsid=b.user_id
where e.erifystate='完成'
union all
--日-完成
select distinct a.r_title,null y_num_e,null m_num_e,b.rdlc_num d_num_e,null m_num_s,null y_num_zf,null m_num_zf
from REPORTVIEWER a 
inner join 
(select sum(rdlc_num) as rdlc_num,rdlc_id,user_id from REPORTVIEWER_count d
where to_char(d.create_date,'dd')=@daty group by rdlc_id,user_id) b 
on b.rdlc_id=a.sid 
inner join s_hse_ticket e on e.reghumsid=b.user_id
where e.erifystate='完成'
union all
--作业中
select distinct  a.r_title,null y_num_e,null m_num_e,null d_num_e,b.rdlc_num m_num_s,null y_num_zf,null m_num_zf
from REPORTVIEWER a 
inner join 
(select sum(rdlc_num) as rdlc_num,rdlc_id,user_id from REPORTVIEWER_count d
where to_char(d.create_date,'mm')=@month group by rdlc_id,user_id) b 
on b.rdlc_id=a.sid 
inner join s_hse_ticket e on e.reghumsid=b.user_id
where e.erifystate='申请'
union all
--年-作废
select distinct   a.r_title,null y_num_e,null m_num_e,null d_num_e,null m_num_s,b.rdlc_num y_num_zf,null m_num_zf
from REPORTVIEWER a 
inner join 
(select sum(rdlc_num) as rdlc_num,rdlc_id,user_id from REPORTVIEWER_count d
where to_char(d.create_date,'yyyy')=@year  group by rdlc_id,user_id) b 
on b.rdlc_id=a.sid 
inner join s_hse_ticket e on e.reghumsid=b.user_id
where e.erifystate='作废'
union all
--月-作废
select distinct   a.r_title,null y_num_e,null m_num_e,null d_num_e,null m_num_s,null y_num_zf,b.rdlc_num m_num_zf
from REPORTVIEWER a 
inner join 
(select sum(rdlc_num) as rdlc_num,rdlc_id,user_id from REPORTVIEWER_count d
where to_char(d.create_date,'mm')=@month  group by rdlc_id,user_id) b 
on b.rdlc_id=a.sid 
inner join s_hse_ticket e on e.reghumsid=b.user_id
where e.erifystate='作废'
) as proc_REPORTVIEWER_count_type
end 

解决方案 »

  1.   

    "select * from view_REPORTVIEWER_count_type where 年=...and月=...and日=..."----你试试这样:“select * from view_REPORTVIEWER_count_type where 年=...or月=...or日=...”
      

  2.   

    创建存储过程这样select * from REPORTVIEWER_count_type_proc where 年=... and 月=... and 日=... 
    报错 改怎么办?
    还有就是execute REPORTVIEWER_count_type_proc 2013,12,26报错无效SQL语句
      

  3.   

    那视图来说 就是假如我查询select * from view_REPORTVIEWER_count_type(视图) where 年=...and月=...and日=...
    那么视图view_REPORTVIEWER_count_type中不是有按年,月,日为判断条件的吗?那么以年为判断条件的取select * from view_REPORTVIEWER_count_type(视图) where 年=...and月=...and日=...中年的值,以月为判断条件的取select * from view_REPORTVIEWER_count_type(视图) where 年=...and月=...and日=...中月的值,以日为判断条件的取select * from view_REPORTVIEWER_count_type(视图) where 年=...and月=...and日=...中日的值
      

  4.   

    在视图外查询时对视图内的时间where 条件做更改? ---- 不能更改
      

  5.   

    那怎么办? 
    这个我还没弄过呢你试试更改视图结构
    更改视图结构?好像没得改 六条SQL就只有其中两个where条件不同  现在想做的就是在视图外做where时间的判断 但是要针对视图内六条SQL语句 这点过不去
      

  6.   


    你这样写就行的
    好像没啥变化啊?是没有变化,你执行这个语句,会报错不

    不会  
    但是execute REPORTVIEWER_count_type_proc 2013,12,26这个会报错 无效SQL语句
      

  7.   


    版主 存储过程我也写了 你看看 
    execute REPORTVIEWER_count_type_proc 2013,12,26报错 无效SQL语句
    而且存储过程好像不能
    select * from REPORTVIEWER_count_type_proc where 年=... and 月=... and 日=... 
    我最终还是要转成select .....的
      

  8.   

    insert into xxx
    exec REPORTVIEWER_count_type_proc  参数
    然后操作xxx表
      

  9.   


    你这个语句是在oracle中建的把
      

  10.   

    那怎么办? 
    这个我还没弄过呢你试试更改视图结构
    更改视图结构?好像没得改 六条SQL就只有其中两个where条件不同  现在想做的就是在视图外做where时间的判断 但是要针对视图内六条SQL语句 这点过不去那就转用存储过程吧,不要用视图了。
      

  11.   

    你这个语句是在oracle中建的把
    嗯嗯
      

  12.   

    不用insert into xxx是干嘛的再建一个表吗?
      

  13.   

    不用insert into xxx是干嘛的再建一个表吗?
    嗯,因为存储过程返回一个结果集,但是要找个地方存起来才能操作,那个XXX可以是临时表,
      

  14.   

    然后我就可以select .. from xxx了吗?
      

  15.   

    版主大大  
    create table proc_REPORTVIEWER_count_type
    (
     r_title varchar(20),
     y_num_e number,
     m_num_e number,
     d_num_e number,
     m_num_s number,
     y_num_zf number,
     m_num_zf number
    )insert into proc_REPORTVIEWER_count_type
    execute values REPORTVIEWER_count_type_proc 报错  未实施的功能
      

  16.   

    execute values这是oracle的写法?T-SQL是exec 存储过程名 参数 就可以了
      

  17.   

    不过你来sql server问oracle的东西,有点浪费大家时间哦
      

  18.   

    呃  我是用sql语句写的 所以就来了
      

  19.   

    t-sql里面是可以
    create table xxx(....)
    insert into xxx 
    exec proc xxxxxx
    select * 
    from xxx
    这样的,oracle小弟不懂
      

  20.   

    版主大大 不是我要加values的
      

  21.   

    (@year int,@month int,@daty int) 你的参数没传...话说oracle既然你用,应该比我清楚语法吧
      

  22.   

    加了以后  而且提示是在
    execute 和 REPORTVIEWER_count_type_proc 之间  加了也错  
      

  23.   

    百度了一下,oracle执行也只需要exec 存储过程名 参数  不需要加values啊
      

  24.   

    这个  真不清楚  我学SQL的 被赶鸭子上架的  我一直写的都是SQL语句 有不通的地方了才换的Oracle的东西  比如to_char(date,'yyyy') 我以前就是写的year(date)
      

  25.   

    exec 存储过程('参数1','参数2');你改这格式看看
      

  26.   

    我参数是想留着select * from proc_REPORTVIEWER_count_type where 用的
      

  27.   

    那用存储过程干毛哦,直接在存储过程判断,然后插入一个表,select * from 这个表就可以拉
      

  28.   

    INSERT proc_reportviewer_count_type VALUES(写全列名)
    exec xxx这样的格式试试
      

  29.   

    不要加into。直接insert 表 values()
      

  30.   

    报错提示 缺少关键字 into
      

  31.   

    单纯exec 存储过程 参数 这样报错不?