--找出现金收入对应的凭证
select  a.* 
into #现金收入对应凭证 
from 
(select * from 基础表_财务类_记账凭证表) as a
inner join 
(
select distinct 单位代码,会计年度,会计电子账簿编号,会计科目编号
from 基础表_财务类_会计科目表
where 会计科目编号 LIKE '101%'
and [是否最底级科目]='1'
) as b
ON A.单位代码=b.单位代码
AND A.会计年度=b.会计年度
and a.会计电子账簿编号=b.会计电子账簿编号
and a.会计科目编号=b.会计科目编号
where A.借方发生额-A.贷方发生额>@限额
--剔除现金收入对应凭证中 
--贷方存在银行存款类科目和摘要中含“调产”或“购房款”
    select distinct 
e.单位代码,e.会计年度,e.会计电子账簿编号,e.会计月份,e.源凭证号,
e.记账凭证编号,e.会计科目编号,e.借方发生额,e.贷方发生额,e.记账凭证摘要,e.记账凭证日期
into #借现金贷非银行存款凭证
from (
select c.[会计电子账簿编号],c.[会计月份],c.[记账凭证编号]
,c.[会计科目编号],c.[借方发生额],c.[贷方发生额],c.记账凭证摘要
,c.记账凭证日期,c.会计年度,c.单位代码,c.源凭证号
from 基础表_财务类_记账凭证表 as c
inner join #现金收入对应凭证  as d
on c.会计电子账簿编号=d.会计电子账簿编号
and c.会计科目编号=d.会计科目编号
and c.会计年度=d.会计年度
and c.单位代码=d.单位代码  
)   as  e
where 源凭证号 not in 
(
 select distinct 源凭证号
 from 基础表_财务类_记账凭证表  as a 
 inner join 
 ( select 会计电子账簿编号,会计科目编号
   from 基础表_财务类_会计科目表 
   where (会计科目名称 like '%银行存款%' or 会计科目名称 like '%财政存款%')
       and  会计科目级次=1
  )  as c
  on a.会计科目编号=c.会计科目编号
  and a.会计电子账簿编号=c.会计电子账簿编号
 where A.借方发生额-A.贷方发生额>@限额
)


select 
 d.[会计年度] as [年度],c.[单位名称],d.[电子账簿简称] 
,a.记账凭证摘要,a.[记账凭证日期],a.[记账凭证编号] 
,a.[借方发生额]-a.[贷方发生额] as 现金收入金额
,a.[会计电子账簿编号],c.排序号
from #借现金贷非银行存款凭证  as a
 inner join 基础表_财务类_电子账簿信息表 as d
  on a.会计电子账簿编号=d.会计电子账簿编号
  and a.会计年度=d.会计年度
  and   (d.会计年度 in (@年度+''))
 inner join 基础表_资料类_单位信息表  as c
 on a.会计年度=c.年份
 and a.单位代码=c.单位代码
 and (c.单位代码 IN (@单位名称+'') or '999999999999' in (@单位名称+''))
反正参数给定以后我无法查询到所需用的数据,是代码写错了,还是怎么了?

解决方案 »

  1.   

    没有表结构,没有数据,无法进行判断.
    建议楼主在两个临时表建立后先检查一下临时表中的数据是否对头,然后再判断最后一句是否能出数据:
    --找出现金收入对应的凭证
    select  a.* 
    into #现金收入对应凭证 
    from 
    (select * from 基础表_财务类_记账凭证表) as a
    inner join 
    (
    select distinct 单位代码,会计年度,会计电子账簿编号,会计科目编号
    from 基础表_财务类_会计科目表
    where 会计科目编号 LIKE '101%'
    and [是否最底级科目]='1'
    ) as b
    ON A.单位代码=b.单位代码
    AND A.会计年度=b.会计年度
    and a.会计电子账簿编号=b.会计电子账簿编号
    and a.会计科目编号=b.会计科目编号
    where A.借方发生额-A.贷方发生额>@限额select * from #现金收入对应凭证--剔除现金收入对应凭证中 
    --贷方存在银行存款类科目和摘要中含“调产”或“购房款”
           select distinct 
        e.单位代码,e.会计年度,e.会计电子账簿编号,e.会计月份,e.源凭证号,
        e.记账凭证编号,e.会计科目编号,e.借方发生额,e.贷方发生额,e.记账凭证摘要,e.记账凭证日期
        into #借现金贷非银行存款凭证
        from (
        select c.[会计电子账簿编号],c.[会计月份],c.[记账凭证编号]
        ,c.[会计科目编号],c.[借方发生额],c.[贷方发生额],c.记账凭证摘要
        ,c.记账凭证日期,c.会计年度,c.单位代码,c.源凭证号
        from 基础表_财务类_记账凭证表 as c
        inner join #现金收入对应凭证  as d
        on c.会计电子账簿编号=d.会计电子账簿编号
        and c.会计科目编号=d.会计科目编号
        and c.会计年度=d.会计年度
        and c.单位代码=d.单位代码  
        )   as  e
        where 源凭证号 not in 
        (
         select distinct 源凭证号
         from 基础表_财务类_记账凭证表  as a 
         inner join 
         ( select 会计电子账簿编号,会计科目编号
           from 基础表_财务类_会计科目表 
           where (会计科目名称 like '%银行存款%' or 会计科目名称 like '%财政存款%')
               and  会计科目级次=1
          )  as c
          on a.会计科目编号=c.会计科目编号
          and a.会计电子账簿编号=c.会计电子账簿编号
         where A.借方发生额-A.贷方发生额>@限额
        )
        
    select * from #借现金贷非银行存款凭证
      
    select 
     d.[会计年度] as [年度],c.[单位名称],d.[电子账簿简称] 
    ,a.记账凭证摘要,a.[记账凭证日期],a.[记账凭证编号] 
    ,a.[借方发生额]-a.[贷方发生额] as 现金收入金额
    ,a.[会计电子账簿编号],c.排序号
    from #借现金贷非银行存款凭证  as a
     inner join 基础表_财务类_电子账簿信息表 as d
      on a.会计电子账簿编号=d.会计电子账簿编号
      and a.会计年度=d.会计年度
      and   (d.会计年度 in (@年度+''))
     inner join 基础表_资料类_单位信息表  as c
     on a.会计年度=c.年份
     and a.单位代码=c.单位代码
     and (c.单位代码 IN (@单位名称+'') or '999999999999' in (@单位名称+''))
      

  2.   

    你可以通过中间输出
    分步查看数据是不是你要的。不一定要一起执行完。
    有变量的情况,查看一下变量是否为null
      

  3.   


    检查过得,两张临时表中都有相应的数据,但是在最后展现的时候就没有了,
    难道是关联写错了?放到sql里就是最后代码的临时表无效,虽然提示是无法绑定由多个部分组成的标示符,但是还是可以执行
      

  4.   

    如果 c.单位代码 IN (@单位名称+'') 里面的  @单位名称 是一个由一些单位组成的字符串的话,不能直接用 in.
    可以这样处理:
    ','+@单位代码+',' like '%,'+c.单位代码+',%'
    参考:
    create table tb(col varchar(20))
    insert into tb select 'aaa' union all select 'bbb' union all select 'ccc'
    declare @col varchar(100)
    set @col='aaa,bbb'
    select * from tb where ','+@col+',' like '%,'+col+',%'
    /*
    col
    --------------------
    aaa
    bbb(2 行受影响)*/
    go
    drop table tb
      

  5.   

    这样处理的目的是为了防止下例中最后一个也被检索:
    create table tb(col varchar(20))
    insert into tb select 'aaa' union all select 'bbb' union all select 'ccc' union all select 'aaaaa'
    declare @col varchar(100)
    set @col='aaa,bbb'
    select * from tb where ','+@col+',' like '%,'+col+',%'
    /*
    col
    --------------------
    aaa
    bbb(2 行受影响)*/
    go
    drop table tb