0
想知道是否有人有關於如何使用任何oracle分析函數重新編寫此sql的建議。 Oracle版本11gR2。提前致謝。Oracle分析函數可能嗎?
SELECT SUB_SEGMENT,
SUM(
CASE
WHEN (TRANSACTION_MONTH = TO_CHAR(SYSDATE, 'MM'))
AND (TRANSACTION_YEAR = (TO_CHAR(SYSDATE, 'YYYY')))
THEN TRAN_AMOUNT
ELSE 0
END) AS MTD,
SUM(
CASE
WHEN (TRANSACTION_MONTH = TO_CHAR(ADD_MONTHS(SYSDATE, -1), 'MM'))
AND (TRANSACTION_YEAR = (TO_CHAR(ADD_MONTHS(SYSDATE, -1), 'YYYY')))
THEN TRAN_AMOUNT
ELSE 0
END) AS MONTH6,
SUM(
CASE
WHEN (TRANSACTION_MONTH = TO_CHAR(ADD_MONTHS(SYSDATE, -2), 'MM'))
AND (TRANSACTION_YEAR = (TO_CHAR(ADD_MONTHS(SYSDATE, -2), 'YYYY')))
THEN TRAN_AMOUNT
ELSE 0
END) AS MONTH5,
SUM(
CASE
WHEN (TRANSACTION_MONTH = TO_CHAR(ADD_MONTHS(SYSDATE, -3), 'MM'))
AND (TRANSACTION_YEAR = (TO_CHAR(ADD_MONTHS(SYSDATE, -3), 'YYYY')))
THEN TRAN_AMOUNT
ELSE 0
END) AS MONTH4,
SUM(
CASE
WHEN (TRANSACTION_MONTH = TO_CHAR(ADD_MONTHS(SYSDATE, -4), 'MM'))
AND (TRANSACTION_YEAR = (TO_CHAR(ADD_MONTHS(SYSDATE, -4), 'YYYY')))
THEN TRAN_AMOUNT
ELSE 0
END) AS MONTH3,
SUM(
CASE
WHEN (TRANSACTION_MONTH = TO_CHAR(ADD_MONTHS(SYSDATE, -5), 'MM'))
AND (TRANSACTION_YEAR = (TO_CHAR(ADD_MONTHS(SYSDATE, -5), 'YYYY')))
THEN TRAN_AMOUNT
ELSE 0
END) AS MONTH2,
SUM(
CASE
WHEN (TRANSACTION_MONTH = TO_CHAR(ADD_MONTHS(SYSDATE, -6), 'MM'))
AND (TRANSACTION_YEAR = (TO_CHAR(ADD_MONTHS(SYSDATE, -6), 'YYYY')))
THEN TRAN_AMOUNT
ELSE 0
END) AS MONTH1
FROM TRAN_TYPE
WHERE INCOMING_OUTGOING = 'I'
GROUP BY SUB_SEGMENT
ORDER BY DECODE(SUB_SEGMENT, 'Premium Plus', 1, 'Premium', 2, 'Upper Mass', 3);
這看起來更像是爲'PIVOT'運營工作 –