Sql server 如何在一个查询中使用sum和max

Sql server 如何在一个查询中使用sum和max,sql-server,Sql Server,我有一张桌子 tblPay ( CID bigint, PartyIdID bigint, PartyName varchar(50), AgentName varchar(50), Agent bigint, Amount decimal(18,2), RecAmount decimal(18,2), OutStanding decimal(18,2) ) 我想选择金额之和,按PartyId重新装入组,我还想选择每个Party

我有一张桌子

tblPay
(
    CID bigint,
    PartyIdID bigint,
    PartyName varchar(50),
    AgentName varchar(50), 
    Agent bigint,
    Amount decimal(18,2),
    RecAmount decimal(18,2),
    OutStanding decimal(18,2)
)
我想选择金额之和,按PartyId重新装入组,我还想选择每个PartyId的最后一个未清分录。为此,我使用以下查询

SELECT  DISTINCT CID, 
        Party.AccLedger_ID PartyID, 
        Party.AccLedger_Name PartyName,
        Agent.AccLedger_Name AgentName,
        Agent.AccLedger_ID AgentID,
        sum(S.Amount) Amount,
        Sum(S.RecAmount) RecAmount,
        S.OutStanding 
Group by PartyID,
         Cid,
         Party.AccLedger_ID,
         Party.AccLedger_Name,
         Agent.AccLedger_Name,
         Agent.AccLedger_ID,
         S.OutStanding  
但我无法达到双方的金额、金额和最后一次未完成记录的总和。有人能帮我吗


这就是我得到的答案。

使用cte获取tblPay信息,并将其连接到上一条记录中的其他表中

WITH cte AS (
    SELECT 
        CID,
        PartyName,
        SUM(Amount) OVER (PARTION BY PartyIdID) Amount,
        SUM(RecAmount) OVER (PARTITION BY PartyIdID) RecAmount,
        OutStanding,
        -- only assuming your CID determines order since you have no date?
        ROW_NUMBER() OVER (PARTITION BY PartyIdID ORDER BY CID DESC) Rn 
    FROM tblPay
) 
SELECT  Party.*,
        Agent.*,
        p.CID,
        p.PartyName,
        p.Amount,
        p.RecAmount,
        p.Oustanding
FROM    Party JOIN Agent
        JOIN cte p ON p.PartyIdID = Party.AccLedger_ID AND p.Rn = 1

使用cte获取tblPay信息,并将其连接到最后一条记录上的其他表中

WITH cte AS (
    SELECT 
        CID,
        PartyName,
        SUM(Amount) OVER (PARTION BY PartyIdID) Amount,
        SUM(RecAmount) OVER (PARTITION BY PartyIdID) RecAmount,
        OutStanding,
        -- only assuming your CID determines order since you have no date?
        ROW_NUMBER() OVER (PARTITION BY PartyIdID ORDER BY CID DESC) Rn 
    FROM tblPay
) 
SELECT  Party.*,
        Agent.*,
        p.CID,
        p.PartyName,
        p.Amount,
        p.RecAmount,
        p.Oustanding
FROM    Party JOIN Agent
        JOIN cte p ON p.PartyIdID = Party.AccLedger_ID AND p.Rn = 1

假设您的记录以
tblPay.CID
顺序插入,请使用子查询

SELECT  p.PartyID,
        p.PartyName,
        SUM(p.Amount) AS PartyAmount,
        SUM(p.RecAmount) AS PartyRecAmount,
        (SELECT TOP 1 OutStanding FROM tblPay p2 WHERE p.PartyID = p2.PartyId ORDER BY CID DESC) AS LastOutStanding
FROM tblPay p
GROUP BY p.PartyID, p.PartyName
外部应用

SELECT  p.PartyID,
        p.PartyName,
        SUM(p.Amount) AS PartyAmount,
        SUM(p.RecAmount) AS PartyRecAmount,
        lastRecord.OutStanding AS LastOutStanding
FROM tblPay p
OUTER APPLY
(
    SELECT TOP 1 OutStanding
    FROM tblPay p2
    WHERE p.PartyID = p2.PartyId
    ORDER BY CID DESC
) lastRecord
GROUP BY p.PartyID, p.PartyName

或者,正如他在回答中所建议的,使用CTE。

假设您的记录是按
tblPay.CID
顺序插入的,请使用子查询

SELECT  p.PartyID,
        p.PartyName,
        SUM(p.Amount) AS PartyAmount,
        SUM(p.RecAmount) AS PartyRecAmount,
        (SELECT TOP 1 OutStanding FROM tblPay p2 WHERE p.PartyID = p2.PartyId ORDER BY CID DESC) AS LastOutStanding
FROM tblPay p
GROUP BY p.PartyID, p.PartyName
外部应用

SELECT  p.PartyID,
        p.PartyName,
        SUM(p.Amount) AS PartyAmount,
        SUM(p.RecAmount) AS PartyRecAmount,
        lastRecord.OutStanding AS LastOutStanding
FROM tblPay p
OUTER APPLY
(
    SELECT TOP 1 OutStanding
    FROM tblPay p2
    WHERE p.PartyID = p2.PartyId
    ORDER BY CID DESC
) lastRecord
GROUP BY p.PartyID, p.PartyName

或者,正如他在回答中所建议的那样,使用CTE。

请添加一些详细信息,说明出现了什么问题。“无法实现”是模糊的。你得到的是错误而不是结果吗?如果是,请在问题中包含错误消息。结果不是你所期望的吗?如果是这样的话,请提供一个示例或描述,说明结果与您期望的结果。作为替代,我将考虑删除<代码>不同的< /代码>作为起点。很多人,包括我自己,都把你的东西贴出来了?你在期待什么?你说你想按PartyId分组,然后在你的查询中你得到了大量的其他变量。我编辑了我的问题。我要数量和数量的总和。另外,我还想输入我们的最后一条记录。您如何确定
tblPay
中的哪条记录是最后一条记录,以便您可以包含“最后一个未完成”的值?在您的示例查询中,我没有看到任何日期字段或排序依据。请添加一些详细信息,说明出现了什么问题。“无法实现”是模糊的。你得到的是错误而不是结果吗?如果是,请在问题中包含错误消息。结果不是你所期望的吗?如果是这样的话,请提供一个示例或描述,说明结果与您期望的结果。作为替代,我将考虑删除<代码>不同的< /代码>作为起点。很多人,包括我自己,都把你的东西贴出来了?你在期待什么?你说你想按PartyId分组,然后在你的查询中你得到了大量的其他变量。我编辑了我的问题。我要数量和数量的总和。另外,我还想输入我们的最后一条记录。您如何确定
tblPay
中的哪条记录是最后一条记录,以便您可以包含“最后一个未完成”的值?在您的示例查询中,我没有看到任何日期字段或
ORDER BY