Oracle SQL Groupby 和 SUM

Oracle SQL Groupby and SUM

我有以下查询,将每个投标 ID 和描述分组并显示其总和:

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

在tableC(SA_TRAN_HEAD),里面有一个字段TRAN_DATETIME. 我希望查询 return 结果介于日期间隔之间,但不希望日期出现在查询列中。

我该怎么做才能实现这一目标?

只需将所需的日期范围添加到 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

这清楚地表明了连接标准是什么,而不是过滤标准。