我正在尝试对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中的结果较少。 你能看到查询有什么问题吗?还有另一种方法可以进行查询吗?
答案 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"));