2011-06-27 163 views
0

我有一个报告,我每个月运行,下面是它的SQL脚本。我目前的问题是我必须以文本格式运行sql脚本,然后将结果集保存到制表符分隔的文件中,然后保存为excel。现在在Excel中,即使它运行的行也能得到一切。我想把所有的东西都放在一个结果集中。请帮忙。谢谢。TSql Report - sql server 2008

declare @xmid varchar(16) 
declare @locationdba varchar(100) 
declare @month varchar(2) 
declare @year varchar(4) 

set @month = '05' 
set @year = '2011' 

select distinct xmid,LOCATIONDBA into #tmpMIDS 
from tblmerchants a 
    join tblmerchantapplications b on a.merchantid = b.merchantid 
where locationdba like 'farmers furniture%' 

SELECT 'TOTAL FOR ALL STORES' 
SELECT 'INTERCHANGE : ALL STORES' 
select ledgercode,substring(cast(ledgercode as varchar),5,3) FeeClass, mrev.description, sum(cnt) cnt, sum(volume) volume, MIC.RATE,MIC.PERITEM, 
--case when substring(cast(ledgercode as varchar),4,1) = 1 then 0.000950 else 0.000925 end Assessments, 
TotalDisc = sum(volume)* MIC.RATE --+ sum(volume) * case when substring(cast(ledgercode as varchar),4,1) = 1 then 0.000950 else 0.000925 end, 
,totalPerItem = sum(cnt) * MIC.PERITEM , 
--TotalAmt = round(sum(TotalAmount),2,1) 
TotalAmt = sum(TotalAmount) 
from monthendrevshare mrev 
    join dbo.MonthendInterchange mIC on mrev.ledgercode = (900000000 + (mic.CardType * 100000) + (ICCode * 100) + 1) and enddate is null 
where ledgercode > 900000 and xmid in (select xmid from #tmpMIDS) 
and entrymonth = @month and entryyear = @year AND ROOTPORTFOLIOACCOUNTNUMBER = '1' 
group by ledgercode,mrev.description, MIC.RATE,MIC.PERITEM 
having sum(volume) > 0 
order by volume desc 

SELECT 'CREDIT INTERCHANGE : ALL STORES' 
select ledgercode, substring(cast(ledgercode as varchar),5,3) FeeClass, mrev.description, sum(cnt) cnt, sum(volume) volume, MIC.RATE,MIC.PERITEM, 
--case when substring(cast(ledgercode as varchar),4,1) = 1 then 0.000950 else 0.000925 end Assessments, 
TotalDisc = sum(volume)* MIC.RATE --+ sum(volume) * case when substring(cast(ledgercode as varchar),4,1) = 1 then 0.000950 else 0.000925 end, 
,totalPerItem = sum(cnt) * MIC.PERITEM, 
--TotalAmt = round(sum(TotalAmount),2,1) 
TotalAmt = sum(TotalAmount) 

from monthendrevshare mrev 
    join dbo.MonthendInterchange mIC on mrev.ledgercode = (900000000 + (mic.CardType * 100000) + (ICCode * 100) + 1) and enddate is null 
where ledgercode > 900000 and xmid in (select xmid from #tmpMIDS) 
and entrymonth = @month and entryyear = @year AND ROOTPORTFOLIOACCOUNTNUMBER = '1' 
group by ledgercode,mrev.description, MIC.RATE,MIC.PERITEM 
having sum(volume) <= 0 
order by volume 

SELECT 'AUTHORIZATIONS : ALL STORES' 
select ledgercode, mrev.description, sum(cnt) cnt, AVG(PERITEM) PERITEM, SUM(TOTALAMOUNT) TOTAL 
from monthendrevshare mrev 
where ledgergroup = 11 
and ledgercode not in (30,102) 
and xmid in (select xmid from #tmpMIDS) 
and entrymonth = @month and entryyear = @year AND ROOTPORTFOLIOACCOUNTNUMBER = '1' 
group by ledgercode,mrev.description 
having SUM(TOTALAMOUNT) > 0 
order by TOTAL desc 

SELECT 'FEES : ALL STORES' 
select ledgercode, mrev.description, sum(volume) Volume, sum(cnt) Count, AVG(RATE) RATE, AVG(PERITEM) PERITEM, SUM(TOTALAMOUNT) TOTAL 
from monthendrevshare mrev 
where (ledgergroup = 12 or ledgercode in (104,105,30,102,500,501,502,503,92,94)) 
and ledgercode not in (33,34,46,79,47,133,48,123) 
and xmid in (select xmid from #tmpMIDS) 
and entrymonth = @month and entryyear = @year AND ROOTPORTFOLIOACCOUNTNUMBER = '1' 
group by ledgercode,mrev.description 
having SUM(TOTALAMOUNT) > 0 
order by TOTAL desc 


DECLARE Merchant_Cursor CURSOR FOR 
    select xmid,locationdba 
    from #tmpMIDS 

OPEN Merchant_Cursor 
FETCH NEXT FROM Merchant_Cursor into @XMID, @locationdba 


WHILE @@FETCH_STATUS = 0 

BEGIN 
    SELECT 'TOTAL FOR STORE : ' + @XMID +' : ' + @locationdba 
    SELECT 'INTERCHANGE FOR STORE : ' + @XMID +' : ' + @locationdba 
    select ledgercode,substring(cast(ledgercode as varchar),5,3) FeeClass, mrev.description, sum(cnt) cnt, sum(volume) volume, MIC.RATE,MIC.PERITEM, 
    --case when substring(cast(ledgercode as varchar),4,1) = 1 then 0.000950 else 0.000925 end Assessments, 
    TotalDisc = sum(volume)* MIC.RATE --+ sum(volume) * case when substring(cast(ledgercode as varchar),4,1) = 1 then 0.000950 else 0.000925 end, 
    ,totalPerItem = sum(cnt) * MIC.PERITEM , 
    --TotalAmt = round(sum(TotalAmount),2,1) 
    TotalAmt = sum(TotalAmount) 

    from monthendrevshare mrev 
     join dbo.MonthendInterchange mIC on mrev.ledgercode = (900000000 + (mic.CardType * 100000) + (ICCode * 100) + 1) and enddate is null 
    where ledgercode > 900000 and xmid = @xmid 
    and entrymonth = @month and entryyear = @year AND ROOTPORTFOLIOACCOUNTNUMBER = '1' 
    group by ledgercode,mrev.description, MIC.RATE,MIC.PERITEM 
    having sum(volume) > 0 
    order by volume desc 

    SELECT 'CREDIT INTERCHANGE FOR STORE : ' + @XMID +' : ' + @locationdba 
    select ledgercode, substring(cast(ledgercode as varchar),5,3) FeeClass, mrev.description, sum(cnt) cnt, sum(volume) volume, MIC.RATE,MIC.PERITEM, 
    --case when substring(cast(ledgercode as varchar),4,1) = 1 then 0.000950 else 0.000925 end Assessments, 
    TotalDisc = sum(volume)* MIC.RATE, --+ sum(volume) * case when substring(cast(ledgercode as varchar),4,1) = 1 then 0.000950 else 0.000925 end, 
    totalPerItem = sum(cnt) * MIC.PERITEM, 
    --TotalAmt = round(sum(TotalAmount),2,1) 
    TotalAmt = sum(TotalAmount) 

    from monthendrevshare mrev 
     join dbo.MonthendInterchange mIC on mrev.ledgercode = (900000000 + (mic.CardType * 100000) + (ICCode * 100) + 1) and enddate is null 
    where ledgercode > 900000 and xmid = @xmid 
    and entrymonth = @month and entryyear = @year AND ROOTPORTFOLIOACCOUNTNUMBER = '1' 
    group by ledgercode,mrev.description, MIC.RATE,MIC.PERITEM 
    having sum(volume) <= 0 
    order by volume 

    SELECT 'AUTHORIZATIONS FOR STORE : ' + @XMID +' : ' + @locationdba 
    select ledgercode, mrev.description, sum(cnt) cnt, AVG(PERITEM) PERITEM, SUM(TOTALAMOUNT) TOTAL 
    from monthendrevshare mrev 
    where ledgergroup = 11 
    and ledgercode not in (30,102) 
    and xmid = @xmid 
    and entrymonth = @month and entryyear = @year AND ROOTPORTFOLIOACCOUNTNUMBER = '1' 
    group by ledgercode,mrev.description 
    having SUM(TOTALAMOUNT) > 0 
    order by TOTAL desc 

    SELECT 'FEES FOR STORE : ' + @XMID +' : ' + @locationdba 
    select ledgercode, mrev.description, sum(volume) Volume, sum(cnt) Count, AVG(RATE) RATE, AVG(PERITEM) PERITEM, SUM(TOTALAMOUNT) TOTAL 
    from monthendrevshare mrev 
where (ledgergroup = 12 or ledgercode in (104,105,30,102,500,501,502,503,92,94)) 
    and ledgercode not in (33,34,46,79,47,133,48,123) 
    and xmid = @xmid 
    and entrymonth = @month and entryyear = @year AND ROOTPORTFOLIOACCOUNTNUMBER = '1' 
    group by ledgercode,mrev.description 
    having SUM(TOTALAMOUNT) > 0 
    order by TOTAL desc 

    FETCH NEXT FROM Merchant_Cursor into @XMID, @locationdba 
END 

CLOSE Merchant_Cursor 
DEALLOCATE Merchant_Cursor 

drop table #tmpMIDS 
+0

@闭门器 - 我不认为这应该被关闭,这只是一个措辞不佳的问题。 – JNK

+0

你在SSMS中运行这个并复制和粘贴结果吗?如果你想要一个结果集,你应该编写一个返回一个结果集的查询。你不想要什么行? – JeffO

+0

这将是很好的发表一些澄清的意见,而不是只是投票结束。 – JeffO

回答

1

我不打算重写整个进程内,但这里是你可以使用的方法:

1 - 使用SET NOCOUNT ON禁用的消息“受影响的XXX行”。

2 - 保持原样,但选择“结果”表,并在过程结束时选择“结果”的内容作为唯一的输出。由于您有不同的字段名称,因此您现在无法真正使用UNION。如果你在结果集之间使用不同的字段名称,那么你将永远无法以功能的方式将它们合并到一个最终结果中。