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
。