У меня есть запрос, который дает значение Sales за последние три месяца. Я хочу получить все данные за три месяца в одном запросе вместо трех разных запросов. Если я дам «Мар-2016», он должен отобразить мне данные за последние три месяца с февраля по 2016 год, с января по 2016 год и с декабря 2015 года.Как получить данные за последние три месяца в одном запросе
Пожалуйста, помогите мне с этим.
SELECT
TO_CHAR(A.JOB_DATE , 'MON-YYYY') S_MON , NULL T_MON,
TO_CHAR(A.JOB_DATE,'MM-YYYY') MM, C.SECTION_CODE SECTION,
B.ITEM_CODE ITEM_CODE, SUM(B.MASTER_QUANTITY) SALES,
NULL TARGET
FROM
TRANSACTION_MASTER A, TRANSACTION_DETAIL B,
ITEM_SECTION C, ITEM D
WHERE
A.TRANSACTION_NUMBER = B.TRANSACTION_NUMBER
AND TO_CHAR(ADD_MONTHS(A.JOB_DATE,1), 'MON-YYYY') = 'MAR-2016'
AND A.TRANSACTION_CODE = B.TRANSACTION_CODE
AND B.ITEM_CODE = D.ITEM_CODE
AND C.SECTION_CODE = D.SECTION_CODE
AND A.TRANSACTION_CODE IN (2,4)
AND D.ITEM_STATUS = 'A'
AND C.SECTION_CODE BETWEEN :ST_CODE AND :END_CODE
GROUP BY
TO_CHAR(A.JOB_DATE, 'MON-YYYY'), TO_CHAR(A.JOB_DATE, 'MM-YYYY'),
C.SECTION_CODE, B.ITEM_CODE
UNION
SELECT
TO_CHAR(A.JOB_DATE, 'MON-YYYY') S_MON, NULL T_MON,
TO_CHAR(A.JOB_DATE, 'MM-YYYY') MM,
C.SECTION_CODE SECTION, B.ITEM_CODE ITEM_CODE,
SUM(B.MASTER_QUANTITY) SALES, NULL TARGET
FROM
TRANSACTION_MASTER A, TRANSACTION_DETAIL B,
ITEM_SECTION C, ITEM D
WHERE
A.TRANSACTION_NUMBER = B.TRANSACTION_NUMBER
AND TO_CHAR(ADD_MONTHS(A.JOB_DATE, 2), 'MON-YYYY')= 'MAR-2016'
AND A.TRANSACTION_CODE = B.TRANSACTION_CODE
AND B.ITEM_CODE = D.ITEM_CODE
AND C.SECTION_CODE = D.SECTION_CODE
AND A.TRANSACTION_CODE IN (2,4)
AND D.ITEM_STATUS = 'A'
AND C.SECTION_CODE BETWEEN :ST_CODE AND :END_CODE
GROUP BY TO_CHAR(A.JOB_DATE , 'MON-YYYY') , TO_CHAR(A.JOB_DATE,'MM-YYYY') ,C.SECTION_CODE , B.ITEM_CODE
UNION
SELECT TO_CHAR(A.JOB_DATE , 'MON-YYYY') S_MON , NULL T_MON , TO_CHAR(A.JOB_DATE,'MM-YYYY') MM ,
C.SECTION_CODE SECTION , B.ITEM_CODE ITEM_CODE , SUM(B.MASTER_QUANTITY) SALES , NULL TARGET
FROM TRANSACTION_MASTER A , TRANSACTION_DETAIL B , ITEM_SECTION C , ITEM D
WHERE A.TRANSACTION_NUMBER = B.TRANSACTION_NUMBER
AND TO_CHAR(ADD_MONTHS(A.JOB_DATE,3),'MON-YYYY') = 'MAR-2016'
AND A.TRANSACTION_CODE = B.TRANSACTION_CODE
AND B.ITEM_CODE = D.ITEM_CODE
AND C.SECTION_CODE = D.SECTION_CODE
AND A.TRANSACTION_CODE IN (2,4)
AND D.ITEM_STATUS = 'A'
AND C.SECTION_CODE BETWEEN :ST_CODE AND :END_CODE
GROUP BY TO_CHAR(A.JOB_DATE , 'MON-YYYY') , TO_CHAR(A.JOB_DATE,'MM-YYYY') ,C.SECTION_CODE , B.ITEM_CODE
[Плохие привычки пинать: использование JOIN в старом стиле] (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style- joins.aspx) - стиль старого стиля * разделенный запятыми список таблиц * был заменен на * правильный * ANSI 'JOIN' синтаксис в ANSI - ** 92 ** SQL Standard (** более 20 лет **) назад), и его использование обескуражено –