我這是應該以下做一個嵌套查詢:的Oracle SQL - 基於結果從一個嵌套查詢和數據
- 底查詢該列中創建了一個名爲「倡議」欄和標誌記錄基礎在「BU_ID」上。
- 然後SUBQRY,使用LAG函數來檢查是否有記錄來5年回來。這是基於「CUSTID」和「INITIATIVE」(在步驟1中定義的)。
- 最後,頂部查詢創建列名爲「TRANSACTION_FLAG」,這將標誌記錄「新建」或「現有」。查詢在60個月之前檢查是否有任何交易。
請參考下面的查詢:
SELECT
"REGION"
, "COUNTRY"
, "CUSTID"
, "CUSTOMER"
, "VERTICAL"
, "DATE_YEARMONTH"
, "DATE_YEAR"
, "ORDER_VALUE"
, "INITIATIVE"
, MAX(CASE WHEN TO_DATE("PREV_FYM_INITIATIVE",'YYYYMM') >= ADD_MONTHS (TO_DATE("DATE_YEARMONTH",'YYYYMM'), -60) THEN 'Existing' ELSE 'New' END) "TRANSACTION_FLAG"
FROM
(
SELECT
SUBQRY."REGION"
, SUBQRY."COUNTRY"
, SUBQRY."CUSTID"
, SUBQRY."CUSTOMER"
, SUBQRY."VERTICAL"
, SUBQRY."DATE_YEARMONTH"
, SUBQRY."DATE_YEAR"
, SUBQRY."ORDER_VALUE"
, SUBQRY."INITIATIVE"
, LAG (SUBQRY."DATE_YEARMONTH", 1) OVER (PARTITION BY SUBQRY."CUSTID", SUBQRY."INITIATIVE" ORDER BY "DATE_YEARMONTH" ASC) "PREV_FYM_INITIATIVE"
FROM
(
SELECT
T1."REGION"
, T1."COUNTRY"
, T1."CUSTID"
, T1."CUSTOMER"
, T1."VERTICAL"
, T3."DATE_YEARMONTH"
, T3."DATE_YEAR"
, T4."ORDER_VALUE"
, T3."DATE_DESC"
, (CASE
WHEN T2."BU_ID" IN ('ACC', 'LXC', 'OTP') THEN 'Process'
ELSE 'NOT Process' END) "INITIATIVE"
FROM
"LIBRARY"."FACTSALES" T4
, "LIBRARY"."CUSTOMER_TBL" T1
, "LIBRARY"."PRODUCT_TBL" T2
, "LIBRARY"."TIME_TBL" T3
WHERE
T4."CUSTOMER_KEY" = T1."CUSTOMER_KEY"
AND T4."PRODUCT_KEY" = T2."PRODUCT_KEY"
AND T4."DATE_KEY" = T3."DATE_KEY"
AND T1."COUNTRY" IN ('Austria', 'Germany', 'France')
AND T3."DATE_YEAR" BETWEEN '2012'AND '2016'
AND T4."ORDER_VALUE" > 0
GROUP BY
T1."REGION"
, T1."COUNTRY"
, T1."CUSTID"
, T1."CUSTOMER"
, T1."VERTICAL"
, T3."DATE_YEARMONTH"
, T3."DATE_YEAR"
, T4."ORDER_VALUE"
, T3."DATE_DESC"
, T2."BU_ID"
) SUBQRY)
WHERE "INITIATIVE" LIKE 'Process'
GROUP BY
"REGION"
, "COUNTRY"
, "CUSTID"
, "CUSTOMER"
, "VERTICAL"
, "DATE_YEARMONTH"
, "DATE_YEAR"
, "ORDER_VALUE"
, "INITIATIVE";
可以說,我得到以下結果對單一客戶的例子:
REGION COUNTRY CUSTID CUSTOMER VERTICAL DATE_YEARMONTH DATE_YEAR ORDER_VALUE INITIATIVE TRANSACTION_FLAG
1. North Germany 25166 Abraxo Cleaner Chemicals 201201 2012 25.50 Process New
2. North Germany 25166 Abraxo Cleaner Chemicals 201201 2012 45.50 Process Existing
3. North Germany 25166 Abraxo Cleaner Chemicals 201405 2014 73.49 Process Existing
4. North Germany 25166 Abraxo Cleaner Chemicals 201507 2015 156.29 Process Existing
5. North Germany 25166 Abraxo Cleaner Chemicals 201511 2015 376.22 Process Existing
正如你可以看到線沒有。 1被標記爲「新」。所有其他行被標記爲「現有」,因爲它們在第一行之後的數據庫中被預訂。但是,行號。 2日當天預訂。
我需要實現的是要總結線標記「新」與它們現有的「,但屬於同一DATE_YEARMONTH線。所以回到上面的5行。我需要總結線路號碼。 1和2.總價值71. 或者,也許有一種簡單的方法來標記這樣的記錄,而不是將它們概括起來?當我下載查詢結果時,這將允許我在excel中輕鬆地進行求和。
p.s. 如果這有什麼用處,使用的查詢來自我以前的帖子:Oracle SQL- Flag records based on record's date vs history。
當你說他們 - 你的意思是把它們合併成一行,所以整個輸出只能是4行?這是否僅在第一個月發生?例如,如果您在同一個月的2015年獲得兩個訂單項,那麼它們不會相加? –
@ Peter M.我不介意只有4行的結果。其實,這可能會更好。我需要檢查兩件事情: 1st)計算新交易的數量;這就是這個查詢最初構建的內容。目標不是將第1行和第2行計爲2筆新交易。 2)稍後我被要求總結新交易的價值。因此,總結第1行和第2行只顯示71行的值將會很好。當然,可能有多條線路,不僅有兩條線路可以符合標準。 – Blase
你需要學習縮進,這是不可讀的。 – Hogan