2014-09-19 21 views
0

我有這個tbl_religion與字段名creldesc顯示值不存在於另一個表

enter image description here

和TBL_MEMBER這些領域 enter image description here

,我有這個疑問算在TBL_MEMBER所有現存宗教和也算不算。男性和女性與宗教的所以我做了這個查詢:

SELECT m.creldesc as type, 
    COUNT(m.creldesc) as total, 
    SUM(CASE WHEN m.cgender='Male' THEN 1 ELSE 0 END) as male, 
    SUM(CASE WHEN m.cgender='Female' THEN 1 ELSE 0 END) as female 
    FROM tbl_member as m, tbl_barangay as b, tbl_household as h 
    WHERE m.chholdnumber = h.chholdnumber and h.cbrgycode=b.cbrgycode and b.cbrgyname = 'AGAO' 
      and m.crelationdesc !='Brgy. Captain' 
    GROUP BY m.creldesc 
    ORDER BY tot DESC; 

,並得到如下的輸出:

enter image description here

我想要實現的是也以0作爲顯示來自tbl_religion剩餘的宗教值。我做了一個左連接但出現錯誤。有人可以幫助我如何達到目的?

type   total male female 
Roman Catholic  7  4  3 
Baptist   3  1  2 
Islam    3  3  0 
Iglesia ni Cristo 1  1  0 
Free Methodist  1  1  0 
Ang Dating Daan 1  0  1 
Aglipay/Filipinsta 0  0  0 
All the Gospel  0  0  0 
Alpha Omega  0  0  0 
and so on............................. 
+1

什麼樣的錯誤? – SanRyu 2014-09-19 07:20:09

+0

使用'LEFT JOIN' – Wanderer 2014-09-19 07:21:06

+0

SELECT \t m.creldesc類型, \t COUNT(m.creldesc)作爲TOT, \t SUM(CASE WHEN m.cgender = '男' THEN ELSE 1 0 END)爲男性, \t SUM(CASE WHEN m.cgender = '女' THEN ELSE 1 0 END)如女性 \t FROM TBL_MEMBER表爲m,tbl_barangay爲b,tbl_household爲h \t左連接tbl_religion ON tbl_religion.creldesc = m.creldesc \t WHERE m.chholdnumber = h.chholdnumber和h.cbrgycode = b.cbrgycode和b.cbrgyname ='AGAO'和m.crelationdesc!='Brgy。隊長' \t GROUP BY m.creldesc \t ORDER BY tot DESC – ecoli 2014-09-19 07:22:25

回答

0

這裏就是我所做的:

 SELECT tbl_member.creldesc AS type, 
      COUNT(tbl_member.creldesc) AS total, 
      SUM(CASE WHEN tbl_member.cgender::text = 'Male'::text THEN 1 ELSE 0 END) AS male, 
      SUM(CASE WHEN tbl_member.cgender::text = 'Female'::text THEN 1 ELSE 0 END) AS female 
     FROM tbl_member 
     GROUP BY tbl_member.creldesc 

     UNION 

     SELECT b.creldesc AS type, 0 AS total, 0 AS male, 0 AS female 
     FROM tbl_religion b 
     WHERE NOT (b.creldesc::text IN 
      (SELECT DISTINCT tbl_member.creldesc FROM tbl_member)) 
     GROUP BY b.creldesc; 

,這裏是它的輸出:

enter image description here

這就是所有:)我使用了UNION而不是LEFT JOIN。

0

使用相同連接的所有表,這樣的做法:

SELECT m.creldesc as type, COUNT(m.creldesc) as tot, 
    SUM(CASE WHEN m.cgender='Male' THEN 1 ELSE 0 END) as male, 
    SUM(CASE WHEN m.cgender='Female' THEN 1 ELSE 0 END) as female 
FROM tbl_religion 
LEFT JOIN tbl_member as m 
ON tbl_religion.creldesc=m.creldesc 
LEFT JOIN tbl_household as h 
ON m.chholdnumber = h.chholdnumber 
LEFT JOIN tbl_barangay as b 
ON h.cbrgycode=b.cbrgycode 
WHERE b.cbrgyname = 'AGAO' AND m.crelationdesc !='Brgy. Captain' 
GROUP BY m.creldesc 
ORDER BY tot DESC 

... FROM tbl_member, tbl_barangay, tbl_household LEFT JOIN tbl_religion ...您當前的查詢方法是錯誤的,會產生語法錯誤。

+0

但我怎麼能有上面的輸出? – ecoli 2014-09-19 07:36:40

+0

仍然我不能達到我想輸出以上 – ecoli 2014-09-19 07:51:49

+0

任何錯誤?值不是如預期的那樣? – 2014-09-19 07:54:42

0

你不能讓這樣的:

來自@表1,@ TABLE2,@表3
LEFT JOIN @ TABLE0 ON ...

只能從一個表中一次選擇的項目......相同加入。

SELECT m.creldesc as type, 
COUNT(m.creldesc) as tot, 
SUM(CASE WHEN m.cgender='Male' THEN 1 ELSE 0 END) as male, 
SUM(CASE WHEN m.cgender='Female' THEN 1 ELSE 0 END) as female 
FROM tbl_member as m 

LEFT JOIN tbl_religion z ON z.creldesc = m.creldesc 
LEFT JOIN tbl_barangay h ON h.cbrgycode=b.cbrgycode 

SO ON.... WITH JOINS 
    GROUP BY m.creldesc 

UPDATE WOKING CODE:

SELECT m.creldesc as type, COUNT(m.creldesc) as tot, SUM(CASE WHEN m.cgender='Male' THEN 1 ELSE 0 END) as male, 
    SUM(CASE WHEN m.cgender='Female' THEN 1 ELSE 0 END) as female 

FROM tbl_member as m 
    LEFT JOIN tbl_religion r ON r.creldesc = m.creldesc 
    LEFT JOIN tbl_barangay as b ON m.chholdnumber = b.cbrgycode 
    LEFT JOIN tbl_household as h ON h.cbrgycode = b.cbrgycode 

WHERE b.cbrgyname = 'AGAO' and m.crelationdesc !='Brgy. Captain' 
GROUP BY m.creldesc 
ORDER BY tot DESC 
+0

中存在的宗教,但我怎麼能有上面的輸出?即時通訊有點與左連接混淆\ – ecoli 2014-09-19 07:37:07

+0

你做出正確的選擇你上面...但是當你加入表時,你做出這樣的事情... SELECT m.creldesc as type,COUNT(m.creldesc)as TOT,SUM(CASE WHEN m.cgender = '男' THEN ELSE 1 0 END)爲男性, \t \t SUM(CASE WHEN m.cgender = '女' THEN ELSE 1 0 END)如女性 \t \t \t FROM TBL_MEMBER表爲m \t \t LEFT JOIN tbl_religion R ON r.creldesc = m.creldesc \t \t LEFT \t JOIN tbl_barangay爲b ON m.chholdnumber = b.cbrgycode \t \t LEFT JOIN tbl_household爲h ON h.cbrgycode = b.cbrgycode \t \t WHERE b.cbrgyname = '阿岡' 和m.crelationdesc!='Brgy。船長 \t GROUP BY m.creldesc \t ORDER BY TOT DESC – SanRyu 2014-09-19 07:38:56

+0

我試過,但我仍然會得到相同的輸出上面還在,我不能@SanRyu – ecoli 2014-09-19 07:45:15

相關問題