2017-07-12 18 views
-1

こんにちは私は別々のAgreeIdの金額の合計を1つのレコードとして取得したいと思います。また、そのAgreeIdの他の列はすべてよくこれは私のSPです。親切に私を助けてください。同じIdを持つ列と1つのレコードの合計を他の列と一緒に選択

ALTER PROCEDURE sp_Contracts 
@ClientId INT 
,@LocationId INT = NULL 
,@UserId INT = NULL 
AS 
BEGIN 
SET NOCOUNT ON; 

IF (@LocationId = 0) 
BEGIN 
    SET @LocationId = NULL 
END 

SELECT 

    a.AgreementNumber 
    ,a.RONo 
    ,a.PONo 
    ,round([dbo].func_GetAgreementTotalNew (a.AgreementId),2) as 'Total' 
    ,round(a.Discount,2) as 'AdjustmentPostTax' 
    ,round(p.Amount,2) as 'AmountPaid' 
    ,p.PaymentMethod 

FROM tblPay AS p 

INNER JOIN tblAgree AS a ON p.AgreeId = a.AgreeId 
WHERE 
    a.ClientId = @ClientId 
    AND a.[Status] <> 6 
    AND (
     (
      @LocationId IS NULL 
      AND (
       A.CheckoutLocation IN (
        SELECT LocationId 
        FROM [dbo].[tblUserLocations] 
        WHERE UserID = @userId 
         AND IsDeleted = 0 
        ) 
       OR A.CheckoutLocation IS NULL 
       ) 
      ) 
     OR A.CheckoutLocation = @LocationId 
     ) 
    END 
+0

MySQLまたはMS SQL Serverを使用していますか?関与していない製品にはタグを付けないでください。 – jarlh

+0

またテーブルデザインは、クエリ – ArunGeorge

+0

が最初にタグを修正するのに役立ちます。これはsql serverのように見えるので、mysqlタグを削除してください。第2に、[sp_'でストアドprocsのプレフィックスを付けないでください(https://msdn.microsoft.com/en-us/library/dd172115(v = vs.100).aspx)。第3に、いくつかのサンプルデータと所望の出力を提示する。 – Tanner

答えて

0

MSSQLを使用している場合、GROUP BY句を使用せずに集計値を計算するためにウィンドウ解析関数を使用できます。

SELECT 
    a.AgreementNumber 
    ,a.RONo 
    ,a.PONo 
    ,round([dbo].func_GetAgreementTotalNew (a.AgreementId),2) as 'Total' 
    ,round(a.Discount,2) as 'AdjustmentPostTax' 
    ,round(p.Amount,2) as 'AmountPaid' 
    ,p.PaymentMethod 
    , SUM(p.Amount) OVER (PARTITION BY p.AgreeId) AS TOT_FOR_ID 
FROM tblPay AS p 
INNER JOIN tblAgree AS a ON p.AgreeId = a.AgreeId 
WHERE a.ClientId = @ClientId 
     AND a.[Status] <> 6 
... 
関連する問題