2012-06-02 38 views
0

通過採取參考從here的Oracle SQL的計數

我做了以下查詢:

SELECT INSTITUTE.ID INST_ID, 
    INSTITUTE.PLACEMENT PLACEMENT, 
    INSTITUTE.ADDRESS INSTITUTE_LOCATION, 
    COUNT(DISTINCT INSTITUTE_DEPARTMENT.id) departments 
-- COUNT(DISTINCT INSTITUTE_CAMPUS.id) campuses 
FROM INSTITUTE 
LEFT JOIN INSTITUTE_DEPARTMENT 
ON (INSTITUTE.id = INSTITUTE_DEPARTMENT.institute_id) 
LEFT JOIN INSTITUTE_COURSE 
ON (INSTITUTE.ID = INSTITUTE_COURSE.INSTITUTE_ID) 
LEFT JOIN INSTITUTE_CAMPUS 
ON (INSTITUTE.ID      = INSTITUTE_CAMPUS.INSTITUTE_ID) 
WHERE INSTITUTE.ID      = 1761 
AND INSTITUTE.IS_ACTIVE    = 1 
AND INSTITUTE.IS_DELETED    = 0 
AND INSTITUTE.DELETED_DATE   IS NULL 
--AND INSTITUTE_CAMPUS.IS_ACTIVE   = 1 
--AND INSTITUTE_CAMPUS.IS_DELETED  = 0 
--AND INSTITUTE_CAMPUS.DELETED_DATE  IS NULL 
AND INSTITUTE_DEPARTMENT.IS_ACTIVE  = 1 
AND INSTITUTE_DEPARTMENT.IS_DELETED = 0 
AND INSTITUTE_DEPARTMENT.DELETED_DATE IS NULL 
GROUP BY INSTITUTE.ID, INSTITUTE.PLACEMENT, INSTITUTE.ADDRESS 

我得到部門域進行正確的計數。

INST_ID | PLACEMENT | INSTITUTE_LOCATION | DEPARTMENTS 
1761  NIIT   Noida    2 

但是,包括校園計數(校園計數爲0這個insitute_id),我得到空行。

In short, when count are o null rows are returned while rows are returned when count are greater than 0. 

回答

2

你應該把你的校園條件放在左連接條件而不是在哪裏條件。如果你把它放在哪裏它過濾你的compaus表。試試這個

SELECT INSTITUTE.ID INST_ID, 
INSTITUTE.PLACEMENT PLACEMENT, 
INSTITUTE.ADDRESS INSTITUTE_LOCATION, 
COUNT(DISTINCT INSTITUTE_DEPARTMENT.id) departments 
COUNT(DISTINCT INSTITUTE_CAMPUS.id) campuses 
FROM INSTITUTE 
LEFT JOIN INSTITUTE_DEPARTMENT 
ON (INSTITUTE.id = INSTITUTE_DEPARTMENT.institute_id) 
LEFT JOIN INSTITUTE_COURSE 
ON (INSTITUTE.ID = INSTITUTE_COURSE.INSTITUTE_ID) 
LEFT JOIN INSTITUTE_CAMPUS 
ON (INSTITUTE.ID      = INSTITUTE_CAMPUS.INSTITUTE_ID AND INSTITUTE_CAMPUS.IS_ACTIVE = 1 AND INSTITUTE_CAMPUS.IS_DELETED = 0 AND INSTITUTE_CAMPUS.DELETED_DATE IS NULL) 
WHERE INSTITUTE.ID      = 1761 
AND INSTITUTE.IS_ACTIVE    = 1 
AND INSTITUTE.IS_DELETED    = 0 
AND INSTITUTE.DELETED_DATE   IS NULL 
AND INSTITUTE_DEPARTMENT.IS_ACTIVE  = 1 
AND INSTITUTE_DEPARTMENT.IS_DELETED = 0 
AND INSTITUTE_DEPARTMENT.DELETED_DATE IS NULL 
GROUP BY INSTITUTE.ID, INSTITUTE.PLACEMENT, INSTITUTE.ADDRESS 

This Works!

+0

感謝您的回答,但它不能解決問題。 –

+0

哦!好。沒有任何條件適合?順便說一下,我從這個問題所瞭解的是1761研究所沒有校園存在,你因此得到0行。 –

+0

執行修改後的查詢返回0行,(對於問題的第二部分)是,當1761沒有校園存在時返回0行。 –