1

我需要 TrasactionPaymentsDetails 中的金额总和

    DECLARE @mydate DATETIME
SELECT @mydate = '2012-07-28'

select sum(rd.Amount) as total,rp.TransactionCode, rp.ReferenceDate,rp.TransactionFlag,rd.Amount

 from ReceiptsPayments rp,ReceiptsPaymentsDetail rd where 
ReferenceDate >= DATEADD(dd,1-day(@mydate),@mydate)
and ReferenceDate <= DATEADD(dd,0-day(DATEADD(mm,1,@mydate)),DATEADD(mm,1,@mydate))
and TransactionFlag='P';

以下是错误。请帮忙

消息 8120,级别 16,状态 1,第 6 行列“ReceiptsPaymentsDetail.TransactionCode”在选择列表中无效,因为它不包含在聚合函数或 GROUP BY 子句中。

4

3 回答 3

3

你需要GROUP BY

DECLARE @mydate DATETIME

SELECT @mydate = '2012-07-28'

SELECT Sum(rd.amount) AS total,
       rp.transactioncode,
       rp.referencedate,
       rp.transactionflag
FROM   receiptspayments rp,
       INNER JOIN receiptspaymentsdetail rd ON rp.id=rd.receiptpaymentsid
WHERE  referencedate >= Dateadd(dd, 1 - Day(@mydate), @mydate)
       AND referencedate <= Dateadd(dd, 0 - Day(Dateadd(mm, 1, @mydate)),
                            Dateadd(mm, 1, @mydate))
       AND transactionflag = 'P'
GROUP  BY rp.transactioncode,
          rp.referencedate,
          rp.transactionflag;  

此外,您需要链接您的表格以避免制作 a CROSS JOIN,我想这不是您想要的。我假设Id你的桌子上有一个地方receiptpayments,有一个 FK 在receiptpaymentsdetails,因此INNER JOIN.

于 2013-06-11T07:38:06.613 回答
1

试试这个——

DECLARE @mydate DATETIME
SELECT @mydate = '20120728'

SELECT  
      total = SUM(rd.Amount) 
    , rp.TransactionCode
    , rp.ReferenceDate
    , rp.TransactionFlag
FROM dbo.ReceiptsPayments rp
JOIN dbo.ReceiptsPaymentsDetail rd ON ON rp.ID = rd.ReceiptPaymentsID
WHERE ReferenceDate >= DATEADD(dd, 1 - DAY(@mydate), @mydate)
    AND ReferenceDate <= DATEADD(dd, - DAY(DATEADD(mm, 1, @mydate)), DATEADD(mm, 1, @mydate))
    AND TransactionFlag = 'P'
GROUP BY 
      rp.TransactionCode
    , rp.ReferenceDate
    , rp.TransactionFlag
于 2013-06-11T07:48:08.307 回答
0

在最后一个条件之后将子句添加Group By到您的语句:where

Group By rp.TransactionCode, rp.ReferenceDate,rp.TransactionFlag
于 2013-06-11T07:39:04.587 回答