在SQL Server 2012中汇总 [英] Rollup in SQL server 2012

查看:86
本文介绍了在SQL Server 2012中汇总的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

亲爱的朋友们,



我是SQL Server 2012的新手..昨天我已经将SQL Server 2008数据库恢复到SQL Server 2012 ...一切正常。 ..由于计算功能在SQLL服务器2012中停止,某些报告无法正常工作..



我在这里复制我的小程序请帮我改进它通过ROLLUP ...



Dear Friends,

I am new to SQL server 2012..yesterday I have restored SQL server 2008 database onto SQL server 2012...everything working fine...however some of reporting does not work due to Compute function discontinues in SQLL server 2012..

I am copying my small procedure here please help me to re wright it through ROLLUP...

ALTER PROCEDURE [dbo].[getReportDailyFundPosition]
  @FromDate varchar(15)=null
 ,@Todate varchar(15)=null

AS
BEGIN
set dateformat dmy
declare  @sumExpense numeric(20,2)
declare  @sumRceive numeric(20,2)
declare  @different numeric(20,2)

Declare @Expense Table(ReleaseDate datetime,RowNo int,ExpenseDetails varchar(500) ,ExpenseAmount numeric(10,2),ExpenseDate varchar(15))
Declare @Receive Table(PaymentExpectedDate datetime,RowNo int,Customer varchar(60) ,Amount numeric(18,2))

Insert into @Expense SELECT ReleaseDate,Row_Number() over(Partition by ReleaseDate order by cast(ReleaseDate as datetime) desc ) ,ExpenseDetails ,ExpenseAmount,ExpenseDate FROM ExpenseDetails
WHERE
    (@FromDate is null or (@FromDate is not null and ReleaseDate >=cast(@FromDate as datetime)))
and (@Todate is null or (@Todate is not null and ReleaseDate <=cast(@Todate as datetime)))
and Status not in ('Rejected','Paid')

Insert into @Receive SELECT cast(ISNull(PID.PaymentExpectedDate,dateadd(dd,30,convert(datetime,PID.InvoiceDate))) as datetime) as PaymentExpectedDate
,Row_Number() over(Partition by cast(ISNull(PID.PaymentExpectedDate,dateadd(dd,30,convert(datetime,PID.InvoiceDate))) as datetime) order by cast(ISNull(PID.PaymentExpectedDate,dateadd(dd,30,convert(datetime,PID.InvoiceDate))) as datetime) desc )
,Customer
,(isnull((select sum(ChequeAmount) + sum(TDSAmount) from PaymentInvoiceBankDetails
         where  InvoiceID=PID.InvoiceID and PaymentDeposited = 'No') ,0)
  + isnull((select distinct PendingAmount from PaymentInvoiceBankDetails
         where  InvoiceID=PID.InvoiceID ),PID.TotalBillAmount)) as Amount

 From PurchaseOrder PO
     INNER JOIN PaymentInvoiceDetails  PID on PID.POID = PO.POID
     INNER JOIN CustomerMaster  C on PO.CustomerName = C.CustomerID
     where
  (isnull((select sum(ChequeAmount) + sum(TDSAmount) from PaymentInvoiceBankDetails
         where  InvoiceID=PID.InvoiceID and PaymentDeposited = 'No') ,0)
  + isnull((select distinct PendingAmount from PaymentInvoiceBankDetails
         where  InvoiceID=PID.InvoiceID ),PID.TotalBillAmount)) >0

     and  GeneratedInvoiceNo is not null
     and (@FromDate is null or (@FromDate is not null and PaymentExpectedDate >=cast(@FromDate as datetime)))
     and (@Todate is null or (@Todate is not null and PaymentExpectedDate <=cast(@Todate as datetime)))


select Date1,ExpenseDetails,ExpenseAmount,ExpenseDate,Customer,Amount
,case when cast (Date1 as datetime ) > cast (ExpenseDate as datetime ) then 'Red' else '' end as RedFlag
,isnull(Amount,0)-isnull(ExpenseAmount,0) as diff
from
(
 select REPLACE(Convert(varchar,isnull(E.ReleaseDate,PaymentExpectedDate),6), ' ', '-') as Date1,ExpenseDetails,ExpenseAmount,REPLACE(convert(varchar,cast (ExpenseDate as datetime ),6), ' ', '-') as ExpenseDate,Customer,Amount
  from @Expense E left join @Receive R on E.ReleaseDate=R.PaymentExpectedDate and E.rowno=R.rowno
 Union
 select REPLACE(Convert(varchar,isnull(E.ReleaseDate,PaymentExpectedDate),6), ' ', '-') as Date1,ExpenseDetails,ExpenseAmount,REPLACE(convert(varchar,cast (ExpenseDate as datetime ),6), ' ', '-') as ExpenseDate,Customer,Amount
  from @Expense E right join @Receive R on E.ReleaseDate=PaymentExpectedDate and E.rowno=R.rowno
) As T
order by cast(Date1 as datetime) desc

Compute sum(ExpenseAmount),sum(Amount),sum(isnull(Amount,0)-isnull(ExpenseAmount,0))

推荐答案

请先阅读我的评论。



看看这里:

使用ROLLUP聚合 [ ^ ]

使用ROLLUP汇总数据 [ ^ ]

CUBE,ROLLUP,COMPUTE,COMPUTE BY,GROUPING SETS [ ^ ]

SQL SERVER - 汇总条款简介 [ ^ ]
Please, read my comment first.

Have a look here:
Aggregation WITH ROLLUP[^]
Summarizing Data Using ROLLUP[^]
CUBE, ROLLUP, COMPUTE, COMPUTE BY, GROUPING SETS[^]
SQL SERVER – Introduction to Rollup Clause[^]


这篇关于在SQL Server 2012中汇总的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆