我有两个表,我正在查找另一个表中具有外键的记录的数量,并按日期对它们进行分组。对于某些月份,我们没有记录,但我希望包括那些值为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') ;我目前的结果如下:

我目前的结果如下:

发布于 2017-03-06 02:07:39
您可以使用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非引号标识符不能是
数据库保留字。带引号的标识符可以是保留字,但不建议这样做。
https://stackoverflow.com/questions/42611988
复制相似问题