2016-06-02 3 views
0

У меня есть хранимая процедуракак суммировать значение столбца с использованием другого значения столбца

ALTER PROCEDURE [dbo].[PaymentServiceDetailBusinessUnit] 
(
[email protected] INT , 
@POId INT , 
@SDId INT 

) 

AS 
BEGIN 

SELECT BusinessUnit , E1Description,Fund,SpendPriority,ServiceType, 
REUId , RCUId, POId, PRR_Id, SUM (PaymentAmount) as TotalPaymentAmount 
FROM 
(
SELECT BU.BusinessUnit , BU.E1Description,BU.Fund,BU.SpendPriority,BU.ServiceType, 
REU.Id AS REUId ,RCU.Id AS RCUId, PaymentAmount,PO.Id as POId, REU.PRR_Id 
FROM [EBSTest].[dbo].[PaymentDetail] PD 
    JOIN PurchaseOrder PO ON PO.Id = PD.PO_Id 
    JOIN fBusinessUnit BU ON BU.id = PD.BU_Id 
LEFT JOIN Reimbursement_EBSUtilization REU ON REU.Id = PD.REU_Id 
LEFT JOIN Reimbursement_CDSUtilization RCU ON RCU.Id = PD.RCU_Id 
LEFT JOIN ProviderReimbursementRequest PRR ON (PRR.Id = REU.PRR_Id OR PRR.Id = RCU.PRR_Id) 
LEFT JOIN CDSUtilization CDS ON CDS.Id = RCU.CDSU_Id 


WHERE 
PO.Id = @POId AND 
--PRR.MRR_Id = @MRRId AND 
(REU.SD_Id = @SDId OR CDS.ServiceDetail_Id = @SDId) 
) AS dt 

GROUP BY 
BusinessUnit , E1Description,Fund,SpendPriority,ServiceType,REUId , RCUId, POId,PRR_Id 



END 

из положить является

BusinessUnit E1Description Fund SpendPriority ServiceType REUId RCUId POId PRR_Id TotalPaymentAmount 
10000002 MVBsd1hnhg CF Normal SA 2331 NULL 12 934 100.00 
10000002 MVBsd1hnhg CF Normal SA 2346 NULL 12 935 60.00 
10000002 MVBsd1hnhg CF Normal SA 2361 NULL 12 937 40.00 
10000002 MVBsd1hnhg CF Normal SA 2389 NULL 12 941 40.00 
10000002 MVBsd1hnhg CF Normal SA 2406 NULL 12 943 40.00 

, но я хочу показать только одну запись с общей суммой от общей суммы платежа с использованием колонки бизнес-единицы -10000002 т.е.

некоторые вещи, как этот

**10000002** MVBsd1hnhg CF Normal SA 2331 NULL 12 934 **280.00** 

может ли один помочь мне в этом?

+0

Вы видите несколько строк, потому что значения в ServiceType и PRR_Id не все равно. Если вы агрегируете данные и хотите только одно значение, вам нужно решить, какой из них он должен быть. MIN, MAX и т. Д. –

+0

Или я думаю, что значения, вызывающие проблему, REUId и RCUId. Трудно сказать, как форматирование происходит на этом посту. –

ответ

2

Удалить REUId , RCUId, POId,PRR_Id из статьи Group By, поскольку они, по-видимому, вызывают разбиение суммарного агрегата.

SELECT BusinessUnit , E1Description,Fund,SpendPriority,ServiceType, 
SUM (PaymentAmount) as TotalPaymentAmount 
FROM 
(
SELECT BU.BusinessUnit , BU.E1Description,BU.Fund,BU.SpendPriority,BU.ServiceType, 
REU.Id AS REUId ,RCU.Id AS RCUId, PaymentAmount,PO.Id as POId, REU.PRR_Id 
FROM [EBSTest].[dbo].[PaymentDetail] PD 
    JOIN PurchaseOrder PO ON PO.Id = PD.PO_Id 
    JOIN fBusinessUnit BU ON BU.id = PD.BU_Id 
LEFT JOIN Reimbursement_EBSUtilization REU ON REU.Id = PD.REU_Id 
LEFT JOIN Reimbursement_CDSUtilization RCU ON RCU.Id = PD.RCU_Id 
LEFT JOIN ProviderReimbursementRequest PRR ON (PRR.Id = REU.PRR_Id OR PRR.Id = RCU.PRR_Id) 
LEFT JOIN CDSUtilization CDS ON CDS.Id = RCU.CDSU_Id 


WHERE 
PO.Id = @POId AND 
--PRR.MRR_Id = @MRRId AND 
(REU.SD_Id = @SDId OR CDS.ServiceDetail_Id = @SDId) 
) AS dt 

GROUP BY 
BusinessUnit , E1Description,Fund,SpendPriority,ServiceType 
0

что-то вроде

;WITH CTE AS 
(
     SELECT BusinessUnit , E1Description,Fund,SpendPriority,ServiceType, 
     REUId , RCUId, POId, PRR_Id, SUM (PaymentAmount) as TotalPaymentAmount 
     FROM 
     (
     SELECT BU.BusinessUnit , BU.E1Description,BU.Fund,BU.SpendPriority,BU.ServiceType, 
     REU.Id AS REUId ,RCU.Id AS RCUId, PaymentAmount,PO.Id as POId, REU.PRR_Id 
     FROM [EBSTest].[dbo].[PaymentDetail] PD 
      JOIN PurchaseOrder PO ON PO.Id = PD.PO_Id 
      JOIN fBusinessUnit BU ON BU.id = PD.BU_Id 
     LEFT JOIN Reimbursement_EBSUtilization REU ON REU.Id = PD.REU_Id 
     LEFT JOIN Reimbursement_CDSUtilization RCU ON RCU.Id = PD.RCU_Id 
     LEFT JOIN ProviderReimbursementRequest PRR ON (PRR.Id = REU.PRR_Id OR PRR.Id = RCU.PRR_Id) 
     LEFT JOIN CDSUtilization CDS ON CDS.Id = RCU.CDSU_Id 


     WHERE 
     PO.Id = @POId AND 
     --PRR.MRR_Id = @MRRId AND 
     (REU.SD_Id = @SDId OR CDS.ServiceDetail_Id = @SDId) 
     ) AS dt 

     GROUP BY 
     BusinessUnit , E1Description,Fund,SpendPriority,ServiceType,REUId , RCUId, POId,PRR_Id 
), 
CTE2 AS 
(
SELECT row_number() OVER(ORDER BY TotalPaymentAmount DESC) AS rown,* FROM CTE WHERE rown = 1 
) 
SELECT *, (SELECT SUM(ST.TotalPaymentAmount) FROM CTE2 ST) As TheTotalAmount FROM CTE2 WHERE CTE2.rown=1; 
Смежные вопросы