T1 = Select * From BASE_TABLE;
T2 = SELECT
"PRODUCT",
"LOCATION",
"DATE",
"TOTAL_QTY",
CASE When "TOTAL_QTY" Is Null
Then 0
ELSE 1
END AS "FLAG"
FROM :T1
order by "DATE";
T3 = SELECT
"PRODUCT",
"LOCATION",
"DATE",
"TOTAL_QTY",
"FLAG",
SUM("FLAG") OVER (PARTITION BY "PRODUCT","LOCATION" ORDER BY "DATE") AS "FLAG_SUM"
FROM :T2
order by "DATE";
T4 = SELECT
"PRODUCT",
"LOCATION",
"DATE",
"TOTAL_QTY",
"FLAG",
"FLAG_SUM",
ROW_NUMBER() OVER (PARTITION BY "PRODUCT","LOCATION","FLAG_SUM" ORDER BY "DATE" DESC) AS "ROW_NUM"
FROM :T3
order by "DATE";
T5 = SELECT
"PRODUCT",
"LOCATION",
"DATE",
"TOTAL_QTY",
"FLAG",
"FLAG_SUM",
"ROW_NUM",
TO_DATE (ADD_MONTHS( "DATE","ROW_NUM")) AS "DATE_NEW"
From :T4
order by "DATE";
T6 = select
T1."PRODUCT",
T1."LOCATION",
T1."P_VERSION",
T1."QTY",
T1."TOTAL_QTY",
T1."DATE",
T5."DATE_NEW"
From :T1 AS T1 LEFT OUTER JOIN :T5 AS T5
on T5."PRODUCT" = T1."PRODUCT"
AND T5."LOCATION" = T1."LOCATION"
AND T5."DATE" = T1."DATE"
order by "DATE";
T7 = SELECT
T6."PRODUCT",
T6."LOCATION",
T6."P_VERSION",
T6."QTY",
T6."TOTAL_QTY",
T6."DATE",
T1."P_VERSION" AS "P_VERSION1",
T1."QTY" AS "QTY1",
T1."TOTAL_QTY" AS "TOTAL_QTY1"
FROM :T6 AS T6 LEFT OUTER JOIN :T1 AS T1
on T1."PRODUCT" = T6."PRODUCT"
AND T1."LOCATION" = T6."LOCATION"
AND T1."DATE" = T6."DATE_NEW"
order by "DATE";
var_out =
SELECT
DISTINCT
"PRODUCT",
"LOCATION",
CASE When "P_VERSION" Is Null
Then "P_VERSION1"
ELSE "P_VERSION"
END AS "P_VERSION",
CASE When "QTY" Is Null
Then "QTY1"
ELSE "QTY"
END AS "QTY",
CASE When "TOTAL_QTY" Is Null
Then "TOTAL_QTY1"
ELSE "TOTAL_QTY"
END AS "TOTAL_QTY",
"DATE"
FROM :T7
order by "DATE",
"P_VERSION";
FUNCTION "XXXX"."YYYYY::TF_LOOKING_FORWARD" ( )
RETURNS TABLE (
"PRODUCT" NVARCHAR(20),
"LOCATION" NVARCHAR(10),
"P_VERSION" NVARCHAR(5),
"QTY" DECIMAL(15,6),
"TOTAL_QTY" DECIMAL(15,6),
"DATE" NVARCHAR(10)
)
LANGUAGE SQLSCRIPT
SQL SECURITY INVOKER AS
BEGIN
/*****************************
Write your function logic
*****************************/
/* TABLE1 SELECTING VALUES FROM TABLE OR VDM */
T1 = Select * from BASE_TABLE;
/* TABLE2 SET FLAG FOR TOTAL_QTY = 0 */
T2 = SELECT
"PRODUCT",
"LOCATION",
"DATE",
"TOTAL_QTY",
CASE When "TOTAL_QTY" Is Null
Then 0
ELSE 1
END AS "FLAG"
FROM :T1
order by "DATE";
/* TABLE3 APPLY RUNNING SUM ON FLAG */
T3 = SELECT
"PRODUCT",
"LOCATION",
"DATE",
"TOTAL_QTY",
"FLAG",
SUM("FLAG") OVER (PARTITION BY "PRODUCT","LOCATION" ORDER BY "DATE") AS "FLAG_SUM"
FROM :T2
order by "DATE";
/* TABLE4 APPLY ROW_NUMBER() ON FLAG_SUM */
T4 = SELECT
"PRODUCT",
"LOCATION",
"DATE",
"TOTAL_QTY",
"FLAG",
"FLAG_SUM",
ROW_NUMBER() OVER (PARTITION BY "PRODUCT","LOCATION","FLAG_SUM" ORDER BY "DATE" DESC) AS "ROW_NUM"
FROM :T3
order by "DATE";
/* TABLE5 ADD NUMBER OF MONTHS TO THE DATE COULMN */
T5 = SELECT
"PRODUCT",
"LOCATION",
"DATE",
"TOTAL_QTY",
"FLAG",
"FLAG_SUM",
"ROW_NUM",
TO_DATE (ADD_MONTHS( "DATE","ROW_NUM")) AS "DATE_NEW"
from :T4
order by "DATE";
/* TABLE6 LEFT OUTER JOIN ON T1 AND T5 */
T6 = select
T1."PRODUCT",
T1."LOCATION",
T1."P_VERSION",
T1."QTY",
T1."TOTAL_QTY",
T1."DATE",
T5."DATE_NEW"
from :T1 AS T1
LEFT OUTER JOIN :T5 AS T5
on T5."PRODUCT" = T1."PRODUCT"
AND T5."LOCATION" = T1."LOCATION"
AND T5."DATE" = T1."DATE"
order by "DATE";
/* TABLE7 LEFT OUTER JOIN ON T6 AND T1 */
T7 = SELECT
T6."PRODUCT",
T6."LOCATION",
T6."P_VERSION",
T6."QTY",
T6."TOTAL_QTY",
T6."DATE",
T1."P_VERSION" AS "P_VERSION1",
T1."QTY" AS "QTY1",
T1."TOTAL_QTY" AS "TOTAL_QTY1"
FROM :T6 AS T6
LEFT OUTER JOIN :T1 AS T1
on T1."PRODUCT" = T6."PRODUCT"
AND T1."LOCATION" = T6."LOCATION"
AND T1."DATE" = T6."DATE_NEW"
order by "DATE";
/* OUTPUT BUILD USING T7 */
var_out =
SELECT
DISTINCT
"PRODUCT",
"LOCATION",
CASE When "P_VERSION" Is Null
Then "P_VERSION1"
ELSE "P_VERSION"
END AS "P_VERSION",
CASE When "QTY" Is Null
Then "QTY1"
ELSE "QTY"
END AS "QTY",
CASE When "TOTAL_QTY" Is Null
Then "TOTAL_QTY1"
ELSE "TOTAL_QTY"
END AS "TOTAL_QTY",
"DATE"
FROM :T7
order by "DATE",
"P_VERSION";
return :var_out;
END;
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
11 | |
9 | |
7 | |
6 | |
4 | |
4 | |
3 | |
3 | |
3 | |
2 |