2015-05-09 5 views
-1

У меня есть следующий запрос, чтобы группы каждый тендер идентификаторы и описания и показывает его общая сумма:Oracle SQL GroupBy и SUM

3020 American Express    20 
1000 Cash - primary currency  9903.25 
3120 House Card     2605.56 
4070 Purchase Order    668.25 
3000 Visa       26005.19 

SELECT B.TENDER_TYPE_ID, A.TENDER_TYPE_DESC, SUM (B.TENDER_AMT) 
FROM POS_TENDER_TYPE_HEAD A, SA_TRAN_TENDER B, SA_TRAN_HEAD C 
WHERE A.TENDER_TYPE_ID = B.TENDER_TYPE_ID AND B.TRAN_SEQ_NO = C.TRAN_SEQ_NO 
GROUP BY B.TENDER_TYPE_ID, A.TENDER_TYPE_DESC 

В таблице C (SA_TRAN_HEAD), есть поле TRAN_DATETIME , Я хочу, чтобы запрос возвращал результаты, падающие между интервалом дат, но не хочу, чтобы дата отображалась в столбцах запроса.

Что я могу сделать для этого?

+1

Просто добавьте это условие в предложение where? Есть ли причина, по которой вы считаете, что это сложнее, - возможно, вы пробовали и получили ошибку? –

+0

Hi Alex, Просто убрал строки кода и получил некоторую ошибку. Затем странно подумал о сложных объединениях. Это было очень просто. Спасибо в любом случае :) –

ответ

1

Просто добавьте нужный диапазон дат в предложении WHERE:

SELECT B.TENDER_TYPE_ID, 
     A.TENDER_TYPE_DESC, 
     SUM (B.TENDER_AMT) 
FROM POS_TENDER_TYPE_HEAD A, 
    SA_TRAN_TENDER B, 
    SA_TRAN_HEAD C 
WHERE A.TENDER_TYPE_ID = B.TENDER_TYPE_ID AND 
     B.TRAN_SEQ_NO = C.TRAN_SEQ_NO AND 
     C.TRAN_DATETIME BETWEEN TO_DATE('01-JAN-2015', 'DD-MON-YYYY') 
          AND TO_DATE('31-MAR-2015', 'DD-MON-YYYY') 
GROUP BY B.TENDER_TYPE_ID, 
     A.TENDER_TYPE_DESC 

Я также предлагаю вам привыкнуть к использованию ANSI синтаксис объединения, как это делает стыки гораздо яснее и более транспортабельны (в частности, для внешних соединений). Следующие должны быть эквивалентны:

SELECT B.TENDER_TYPE_ID, 
     A.TENDER_TYPE_DESC, 
     SUM (B.TENDER_AMT) 
FROM POS_TENDER_TYPE_HEAD A 
INNER JOIN SA_TRAN_TENDER B 
    ON B.TENDER_TYPE_ID = A.TENDER_TYPE_ID 
INNER JOIN SA_TRAN_HEAD C 
    ON C.TRAN_SEQ_NO = B.TRAN_SEQ_NO 
WHERE C.TRAN_DATETIME BETWEEN TO_DATE('01-JAN-2015 00:00:00', 'DD-MON-YYYY HH24:MI:SS') 
          AND TO_DATE('31-MAR-2015 23:59:59', 'DD-MON-YYYY HH24:MI:SS') 
GROUP BY B.TENDER_TYPE_ID, 
     A.TENDER_TYPE_DESC 

Это дает понять, что объединение критерии, в отличие от критериев фильтра.

Делитесь и наслаждайтесь.