test this one...
-- drop PROCEDURE "Project_Bal_100715"
CREATE PROCEDURE "Project_Bal_100715"
(
IN dateFrom date
, IN dateTo date
)
AS
BEGIN
CREATE LOCAL TEMPORARY TABLE #TEST_TABLE
(
"TransId" int
,"PrjCode" nvarchar(10)
,"PrjName" nvarchar(100)
,"Account" nvarchar(15)
,"AcctName" nvarchar(100)
,"RefDate" timestamp
,"Memo" nvarchar(50)
,"Debit" decimal(21,6)
,"Credit" decimal(21,6)
,"BatchNum" int
,"CreateDate" timestamp
,"TaxDate" timestamp
,"Ref2" nvarchar(100)
,"FCDebit" decimal(21,6)
,"FCCredit" decimal(21,6)
,"DueDate" timestamp
,"Debit_BF" decimal(21,6)
,"Credit_BF" decimal(21,6)
,"CardCode" nvarchar(15)
,"CardName" nvarchar(100)
,"U_PR_TYPE" nvarchar(100)
);
INSERT INTO #TEST_TABLE
SELECT T2."TransId", T0."PrjCode", T0."PrjName", T1."Account",
T3."AcctName", T1."RefDate", T2."Memo", T1."Debit", T1."Credit", T1."BatchNum", T2."CreateDate",
T2."TaxDate",
T1."Ref2", T1."FCDebit", T1."FCCredit", T1."DueDate", 0.0 AS "Debit_BF",
0.0 AS "Credit_BF", T4."CardCode", T4."CardName" , T0.U_PR_TYPE
FROM OPRJ T0
INNER JOIN JDT1 T1 ON T0."PrjCode" = T1."Project"
INNER JOIN OJDT T2 ON T1."TransId" = T2."TransId"
INNER JOIN OACT T3 ON T1."Account" = T3."AcctCode"
INNER JOIN OCRD T4 ON T4."CardCode" = T1."ShortName"
WHERE T1."RefDate" BETWEEN :dateFrom AND :dateTo
AND T0.U_PR_TYPE = 'Employee'
AND T3."AcctCode" = '2001010952'
ORDER BY T0."PrjCode", T2."TransId";
UPDATE #test_table
SET #test_table."Debit_BF" = "DebitSum"
, #test_table."Credit_BF" = CASE WHEN "DebitSum" = 0 THEN 0 ELSE "CreditSum" END
FROM #test_table
JOIN (
SELECT "PrjCode", "Account", "CardCode", SUM(IFNULL("Debit", 0)) AS "DebitSum",
SUM(IFNULL("Credit", 0)) AS "CreditSum"
FROM #test_table
GROUP BY "PrjCode", "Account", "CardCode") AS b
ON
#test_table."PrjCode" = b."PrjCode"
AND #test_table."Account" = b."Account"
AND #test_table."CardCode" = b."CardCode";
SELECT *
FROM #test_table
ORDER BY "PrjCode", "TransId";
END;
--// CALL "Project_Bal_100715" ( '20100101', '20161231' )