2014-09-19 6 views
0

У меня есть этот tbl_religion с FIELDNAME 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

, что я хочу, чтобы достичь также отображения оставшегося религии от tbl_religion с 0, как стоимость. Я сделал левое соединение, но получил ошибку. Может ли кто-нибудь помочь мне, как я могу это достичь?

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

+0

Используйте 'ЛЕВЫЙ JOIN' – Wanderer

+0

ВЫБОР \t m.creldesc как тип, \t COUNT (m.creldesc) как TOT, \t SUM (случай, когда m.cgender = 'Мужской', а затем 1 еще 0 концов) как самец, \t СУММА (случай, когда m.cgender = 'Женский' ТОГДА 1 еще 0 концов) как женский \t ИЗ tbl_member как м, tbl_barangay как б, как tbl_household ч \t LEFT JOIN tbl_religion пО tbl_religion.creldesc = m.creldesc \t ГДЕ m.chholdnumber = h.chholdnumber и h.cbrgycode = b.cbrgycode и b.cbrgyname = 'AGAO' и m.crelationdesc! = 'Brgy. Капитан ' \t GROUP BY m.creldesc ЗАКАЗАТЬСЯ НА DESC – ecoli

ответ

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

+0

все еще я не могу добиться того, что я хочу вывести выше – ecoli

+0

Любая ошибка? Значения не равны нулю, как ожидалось? –

0

Вы не можете сделать это:

ОТ @ TABLE1, @ TABLE2, @ Table3
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 КОД:

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

, но как я могу получить этот вывод выше? im немного запутался с левым соединением \ – ecoli

+0

, вы делаете именно тот, который у вас есть выше ... но когда вы присоединяетесь к столам, вы делаете что-то вроде этого ... SELECT m.creldesc as type, COUNT (m.creldesc) as карапуз, SUM (CASE WHEN m.cgender = 'Мужской' THEN 1 ELSE 0 END), как мужчина, \t \t SUM (CASE WHEN m.cgender = 'Женский' THEN 1 ELSE 0 END) как женский \t \t \t ОТ tbl_member, как м \t \t LEFT JOIN tbl_religion г на r.creldesc = m.creldesc \t \t \t LEFT JOIN tbl_barangay, как B ON m.chholdnumber = b.cbrgycode \t \t LEFT JOIN tbl_household в час ON h.cbrgycode = b.cbrgycode \t \t WHERE b.cbrgyname = 'AGAO' и m.crelationdesc! = 'Brgy. Капитанская \t GROUP BY m.creldesc \t ORDER BY TOT DESC – SanRyu

+0

Я пробовал это, но до сих пор я получаю тот же результат выше еще, я не могу отобразить все остальные религии, с 0 значениями @SanRyu – ecoli

Смежные вопросы