2015-12-22 40 views
0

我想按月计算预算事务处理行的总和。如果我的查询出现错误。 我查询的结果是:获取总和BudgetTransactionLine

RECIDLine RecIDHeader Date      Amount 
5637157326 5637149076 2012-08-01 00:00:00.000 850.00 
5637157342 5637149079 2012-12-01 00:00:00.000 1000.00 
5637157343 5637149079 2012-12-01 00:00:00.000 80.00 
5637157344 5637149079 2012-12-01 00:00:00.000 2700.00 

但我希望得到的财产以后这样的:

RECIDLine RecIDHeader Date      Amount 
    5637157326 5637149076 2012-08-01 00:00:00.000 850.00 
    5637157342 5637149079 2012-12-01 00:00:00.000 3780.00 

这是我的查询:

IF OBJECT_ID('tempdb..#BudgetTransTmp') IS NOT NULL 
     DROP TABLE #BudgetTransTmp 
    Select 
      BudgetTransactionLine.RECID          AS RecIdLine, 
      BUDGETTRANSACTIONHEADER.RECID         AS RecIdHeader, 
      BudgetTransactionLine.DATE, 
      SUM(CAST((BudgetTransactionLine.TransactionCurrencyAmount) as decimal(18,2))) AS Amount 
    INTO #BudgetTransTmp 
    FROM MicrosoftDynamicsAX.dbo.BudgetTransactionLine     AS BudgetTransactionLine 

      INNER JOIN MicrosoftDynamicsAX.dbo.BUDGETTRANSACTIONHEADER  AS BUDGETTRANSACTIONHEADER 
      ON BUDGETTRANSACTIONHEADER.RECID        = BudgetTransactionLine.BUDGETTRANSACTIONHEADER 
      AND BUDGETTRANSACTIONHEADER.budgetTransactionType    = '3' 
      AND BUDGETTRANSACTIONHEADER.PARTITION       = @Partition 

    WHERE BudgetTransactionLine.PARTITION         [email protected] 
      AND BudgetTransactionCode.DATAAREAID = 'USMF' 
      AND BudgetTransactionLine.DATE >= PeriodCalandarTmp.StartDate 
      AND BudgetTransactionLine.DATE <= PeriodCalandarTmp.EndDate 


    GROUP BY BudgetTransactionLine.DATE, 
       BUDGETTRANSACTIONHEADER.RECID, 
       BudgetTransactionLine.RECID    
    select * from #BudgetTransTmp 

,我需要保持BudgetTransactionLine。 RECID in select

回答

1

您不应该包含BudgetTransactionLine.RecIdRecIdLine)在您的GROUP BY

如果需要此列,则必须使用的Aggregate Function一个(例如在选择部分MIN(BudgetTransactionLine.RecId) AS RecIdLine

0

只是把你在简单的CTE整个数据,只是与你的临时表连接,请去通过查询根据该

下面的示例数据小心地插入你的代码

declare @Table1 TABLE 
    (RECIDLine BIGint, RecIDHeader BIGint, Date varchar(30), Amount DECIMAL(18,2)) 
; 

INSERT INTO @Table1 
    (RECIDLine, RecIDHeader, Date, Amount) 
VALUES 
    (5637157326, 5637149076, '2012-08-01 00:00:00.000', 850.00), 
    (5637157342, 5637149079, '2012-12-01 00:00:00.000', 1000.00), 
    (5637157343, 5637149079, '2012-12-01 00:00:00.000', 80.00), 
    (5637157344, 5637149079, '2012-12-01 00:00:00.000', 2700.00) 
; 


;WITH CTE AS (
select RecIDHeader,Date,SUM(Amount)Amount,ROW_NUMBER()OVER(PARTITION BY RecIDHeader ORDER BY Date)RN from @Table1 
GROUP BY RecIDHeader,Date) 

Select T.RECIDLine,C.RecIDHeader,C.Amount,C.Amount FROM CTE C 
INNER JOIN (select MIN(RECIDLine) RECIDLine, RecIDHeader from @Table1 
GROUP BY RecIDHeader)T 
ON T.RecIDHeader = C.RecIDHeader