我需要对MTH1,MTH2等列进行求和,但是对于我传递的参数,它将为同一帐户代码生成六行信息,这是正确的,并且应该产生的问题是我怎么只返回一个数据,但加上六行的总和,这就是我到目前为止对存储过程的了解。
ALTER PROCEDURE [dbo].[sumbalances]
@AccountRef VARCHAR(500),
@SortOrder INT,
@CATEGORY INT
AS
BEGIN
SET NOCOUNT ON;
SELECT
NOMINAL_LEDGER.ACCOUNT_REF, NOMINAL_LEDGER.NAME,
NOMINAL_LEDGER.ACCOUNT_TYPE, NOMINAL_LEDGER.BALANCE,
NOMINAL_LEDGER.QUICK_RATIO, NOMINAL_LEDGER.SOFA_ID,
NOMINAL_LEDGER.PRIOR_YR_MTH1, NOMINAL_LEDGER.PRIOR_YR_MTH2,
NOMINAL_LEDGER.PRIOR_YR_MTH3, NOMINAL_LEDGER.PRIOR_YR_MTH4,
NOMINAL_LEDGER.PRIOR_YR_MTH5, NOMINAL_LEDGER.PRIOR_YR_MTH6,
NOMINAL_LEDGER.PRIOR_YR_MTH7, NOMINAL_LEDGER.PRIOR_YR_MTH8,
NOMINAL_LEDGER.PRIOR_YR_MTH9, NOMINAL_LEDGER.PRIOR_YR_MTH10,
NOMINAL_LEDGER.PRIOR_YR_MTH11, NOMINAL_LEDGER.PRIOR_YR_MTH12,
NOMINAL_LEDGER.PRIOR_YR2_MTH1, NOMINAL_LEDGER.PRIOR_YR2_MTH2,
NOMINAL_LEDGER.PRIOR_YR2_MTH3,
FROM
CATEGORY
LEFT JOIN
NOMINAL_LEDGER ON CATEGORY.CompanyID = NOMINAL_LEDGER.CompanyID
WHERE
ACCOUNT_REF = @AccountRef
AND SORT_ORDER = @SortOrder
AND CATEGORY = @CATEGORY
END
我认为我需要某种循环来将所有MTH1的和保存下来,或者不需要那么复杂。
下面是数据示例。
例如,如果它是第1个,它将添加
40000.00
44000.00
并在MTH 1列中返回该总数,但如果从那以后求和,则只对所有它们的一行进行累加。
编辑2
请在这里查看我的sql小提琴,如果有人可以帮忙,我在链接类别表时会遇到一些麻烦。但这不是上面的主要问题,所以你们可以看到数据
答案 0 :(得分:1)
您似乎只想要GROUP BY
。但是您还可以通过其他方式简化查询:
select nl.ACCOUNT_REF,
sum(nl.PRIOR_YR_MTH1) as PRIOR_YR_MTH1,
sum(nl.PRIOR_YR_MTH2) as PRIOR_YR_MTH2,
. . . - fill in the rest of the months
from NOMINAL_LEDGER nl join
CATEGORY c
on c.CompanyID = nl.CompanyID
where nl.ACCOUNT_REF = @AccountRef and
nl.SORT_ORDER = @SortOrder and
c.CATEGORY = @CATEGORY
group by nl.ACCOUNT_REF;
注意:
WHERE
子句(大概)撤消LEFT JOIN
,将其变成INNER JOIN
。因此,请使用正确的JOIN
。