2013-12-05 8 views
0

У меня есть две таблицы (main_table) и (sub_table), связанные с person_id. Теперь я хочу выбрать person_id из основной таблицы и количество записей в sub_table, относящихся к main_table, где записи в sub_table not равный 'eco' .. теперь проблема в том, когда я делаю это .. запрос получает только person_id, который не равен «eco» ... но я хочу из запроса выбрать each person_id и выбрать count 0, если person_id в sub_table equal 'eco ':select count from table from other table

SELECT m.person_id, COUNT(*) AS eco FROM (SELECT person_id FROM Main_table 
        WHERE  (person_id ='c')AS m INNER JOIN 
         (SELECT person_id 
         FROM   sub_table 
         WHERE person_status != 'eco' 
         GROUP BY person_id) AS eco ON eco.person_id = m.person_id GROUP BY m.person_id 
+0

Какого СУБД г пользуется? – CloudyMarble

+0

sql сервер экспресс 2008 – Hamonbatra

ответ

1

проблема заключается в том, что вы INNER присоединиться к вашему sub_table, поэтому по определению лимитирующим результаты только люди с n в этой таблице, которая не равна eco.

Я думаю, что вы можете сделать это, просто осталось присоединиться к вашему столу к югу, с person_status в объединении критериев:

SELECT m.Person_ID, 
     COUNT(s.Person_ID) AS NonEcoCount 
FROM Main_Table m 
     LEFT JOIN sub_table s 
      ON s.Person_ID = m.Person_ID 
      AND s.person_status != 'eco' 
GROUP BY m.Person_ID; 
+0

большое спасибо .. идеальный – Hamonbatra

1
SELECT m.person_id, 
     countNonEco = (SELECT COUNT(*) FROM sub_table s 
         WHERE m.person_id = s.person_id 
         AND (s.person_status IS NULL OR s.person_status <> 'eco')) 
FROM Main_table m 
Смежные вопросы