Oracle DB:Query返回的结果少于预期

时间:2015-04-17 18:07:12

标签: sql oracle join

我正在尝试对Oracle DB进行查询。我需要显示客户名称(第1列),客户在08年(第2列)中定位视频的次数,在09个月(第3列)中定位视频的次数,在第10个月定位视频的次数(第4列)列)

SELECT DISTINCT A.NOMECLI, COUNT(DISTINCT B.DATALOC) AS MESOITO, COUNT(DISTINCT C.DATALOC) AS MESNOVE, COUNT(DISTINCT D.DATALOC) AS MESDEZ FROM TBCLIENTE A
LEFT JOIN TBLOCACAO B ON A.PKCODCLI = B.FKCODCLI AND EXTRACT(MONTH FROM B.DATALOC) = '08'
LEFT JOIN TBLOCACAO C ON A.PKCODCLI = C.FKCODCLI AND EXTRACT(MONTH FROM C.DATALOC) = '09'
LEFT JOIN TBLOCACAO D ON A.PKCODCLI = D.FKCODCLI AND EXTRACT(MONTH FROM D.DATALOC) = '10'
GROUP BY A.NOMECLI;

但结果是错误的,因为三个计数列中的两个显示DB中的结果较少。 你能看到查询有什么问题吗?还有另一种方法可以进行查询吗?

1 个答案:

答案 0 :(得分:1)

您的查询计算为明显dataloc,因此这可能是您获得的结果少于您想要的原因。 你可以写这个更简单(使用Oracle 11g):

select * from (
    select c.pkcodcli, c.nomecli, extract(month from dataloc) mth
      from tbcliente c join tblocacao l on l.fkcodcli = c.pkcodcli)
  pivot (count(mth) for mth in (8 as "MESOITO", 9 as "MESNOVE", 10 as "MESDEZ"));

SQLFiddle demo