0

我有两个表,我正在寻找在另一个表中具有外键并按日期对它们进行分组的记录数。有几个月我们没有记录,但我想包括那些月份,值为 0 表示该月没有任何记录。

我的 SQL 代码是这样的:

SELECT count(*),
       TO_CHAR("TransactionDate",'MONTH')
FROM "Transaction"
WHERE "Type" IN
    (SELECT "TypeID"
     FROM "TYPE_OF_PRODUCT")
GROUP BY TO_CHAR("TransactionDate",'MONTH') ;

我目前的结果是这样的:

在此处输入图像描述

我目前的结果是这样的:

在此处输入图像描述

4

1 回答 1

3

您可以使用它生成所有月份connect by并使用它进行查询:

select c.Mon,
    coalesce(t.cnt, 0) cnt
from (
    select to_char(add_months(sysdate, level), 'MONTH') Mon
    from dual connect by level <= 12
    ) c
left join (
    select count(*) cnt,
        TO_CHAR("TransactionDate", 'MONTH') Mon
    from "Transaction"
    where "Type" in (
            select "TypeID"
            from "TYPE_OF_PRODUCT"
            )
    group by TO_CHAR("TransactionDate", 'MONTH')
    ) t
    on c.Mon = t.Mon;

另外,作为旁注,"在标识符中使用不是一个好习惯。使用不带双引号的简单标识符。

引用官方网站 - https://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements008.htm

不带引号的标识符不能是 Oracle 数据库保留字。带引号的标识符可以是保留字,但不建议这样做

于 2017-03-05T18:07:39.493 回答