【问题标题】:Multiple temp tables in stored procedure and creating ssrs存储过程中的多个临时表并创建 ssrs
【发布时间】:2019-08-05 17:30:54
【问题描述】:

我是 ssrs 的新手。我有一个具有输入参数的存储过程。基于这些参数,我正在创建一个临时表,然后我有 5 个其他临时表。最终的临时表具有结果集。

我必须在 SSRS 中使用它。我创建了数据源并在数据集中提供了存储过程名称。参数显示正确,但数据集显示的列与最终表中的不同。

我有疑问,如果我使用 6 个临时表,而最终表 t6 是结果 - 我是否必须做出像 @sql6 = @sql1+ @sql2 + @sql3 + @sql4+ @sql5 这样的查询语句

@sql是临时表数据吗?

我不知道该怎么办。也许写了一条 SQL 语句,但仍然想找出答案。怎么做。这是我的存储过程:

CREATE PROCEDURE [dbo].[cdcr_rpt_ahpmap_billing]
     (@startdate DATE,
      @enddate DATE,
      @location VARCHAR(MAX))
AS
    execute sp_msdroptemptable #t1
    execute sp_msdroptemptable #t2
    execute sp_msdroptemptable #t3
    execute sp_msdroptemptable #t4
    execute sp_msdroptemptable #t5
    execute sp_msdroptemptable #t6

    select 
        ep.person_id, ep.enc_id, pe.enc_nbr, pe.enc_timestamp 
    into 
        #t1 
    from 
        encounter_payer ep 
    inner join 
        patient_encounter (nolock) pe on ep.enc_id = pe.enc_id
    inner join 
        master_im_ mm (nolock) on pe.person_id = mm.person_id
                               and pe.enc_id = mm.enc_id
    inner join 
        location_mstr lm (nolock) on pe.location_id = lm.location_id
    where 
        ep.payer_id in ('96D3C808-E89F-45D6-9426-BA943767B78B', 
                        '2F08F790-7C21-4E50-92F1-137638DF448C', 
                        'CC55FFA2-A97C-48D8-8737-33B60C05F881', 
                        'D541C86F-9A6F-435E-8587-566992E0357F')
        and pe.billable_ind = 'Y'
        and mm.visit_type not in ('Chart Update', 'Nurse Visit', 'Patient Communication')
        and pe.person_id not in (select person_id from dbo.View_NG_test_patients)
        and lm.location_name in (select * from dbo.fnSplit(@Location, ', '))    
        and cast(pe.enc_timestamp as date) between @startdate and @enddate
    group by 
        ep.enc_id, pe.enc_nbr, ep.person_id, pe.enc_timestamp
    having 
        count(*) > 1
    order by 
        pe.enc_nbr

    select 
        t.person_id, t.enc_id, t.enc_nbr, t.enc_timestamp, 
        pm.payer_name, pm.payer_id, tr.tran_amt, tr.type 
    into 
        #t2
    from
        #t1 t
    inner join 
        encounter_payer ep (nolock) on t.person_id = ep.person_id
                                    and t.enc_id = ep.enc_id
    inner join 
        payer_mstr pm (nolock) on ep.payer_id = pm.payer_id
    left outer join 
        transactions tr (nolock) on t.person_id = tr.person_id
                                 and t.enc_id = tr.source_id
                                 and ep.payer_id = tr.payer_id
    where 
        ep.payer_id in ('96D3C808-E89F-45D6-9426-BA943767B78B', 
                        '2F08F790-7C21-4E50-92F1-137638DF448C', 
                        'CC55FFA2-A97C-48D8-8737-33B60C05F881', 
                        'D541C86F-9A6F-435E-8587-566992E0357F')
    order by 
        t.enc_nbr

    --for getting transactions amount sum
    SELECT
        t.enc_nbr, t.payer_name, t.type,
        SUM(t.tran_amt) transaction_amt
    FROM 
        #t2 t 
    GROUP BY  
        t.enc_nbr, t.payer_name, t.type 
    ORDER BY
        t.enc_nbr, t.payer_name, t.type 


    --for getting transactions amount sum as shown in practice management horizontally.
    select p.* into #t3
    from #t2  pivot (
        sum(tran_amt) for type in ([C],[A])
    ) as p
    order by enc_nbr

    --select encounter number in which map is null.
    select *  into #t4 from  #t3
    where enc_nbr in (select enc_nbr from #t3
                      where payer_name in ('M MAP Supp NGS' , 'M MAP Supp Noridian')
                      and c is null and a is null)
    order by enc_nbr

    --select only ones for which claims date created.
    select t.enc_nbr, t.enc_timestamp , t.payer_name , t.c, c.create_timestamp, c.claim_id, t.enc_id into #t5
    from #t4 t left join claims c 
    on t.person_id = c.person_id
    and t.enc_id = c.enc_id
    and t.payer_id = c.payer_id
    order by t.enc_nbr



    --select only ones for mentioned cptcodes
    select count(*) over(partition by t.enc_nbr )as 'count', t.enc_nbr , t.enc_timestamp ,
    t.payer_name , t.c , t.create_timestamp into #t6
    from #t5 t inner join claim_charges c 
    on t.claim_id = c.claim_id
    and t.enc_id = c.enc_id
    where claim_cpt4_code_id in ('92002', '92004', '99202', '99203', '99204', '99205', 'G0101', 'Q0091',
                                 '92012', '92014', '99212', '99213', '99214', '99215', 'G0402', 'G0438',
                                 'G0439', '90791', '90792', '90832', '90834', '90837', '90839', '90845', 'G0467')    
    order by t.enc_nbr


    --select only ones for which claims date not created.
    select enc_nbr[Encounter No.], enc_timestamp[Encounter timestamp], payer_name[Payer Name],
    create_timestamp[Claims create timestamp] from #t6
    where count = 1
    and payer_name not in ('M MAP Supp NGS', 'M MAP Supp Noridian')

我只想在ssrs中显示#t6的结果

【问题讨论】:

    标签: reporting-services


    【解决方案1】:

    SSRS 将使用从数据集查询输出的第一个记录集。因此,如果您的 SP 仅从 #6 输出(看起来是这样),那么这就是 SSRS 将“看到”的全部内容。

    换一种方式....在 SSMS 中运行 proc,如果您只返回一个结果集,那么您就可以了。如果您获得多个,则只有第一个对 SSRS 可见。

    【讨论】:

      猜你喜欢
      • 2018-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-15
      • 1970-01-01
      • 2010-09-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多