【问题标题】:select count from table upon other table从表中选择计数到其他表
【发布时间】:2013-12-05 12:34:27
【问题描述】:

我有两个表 (main_table) 和 (sub_table) 与 person_id 相关..现在我想从主表中选择 person_id 和 sub_table 中与 main_table 相关的记录计数,其中 sub_table 中的记录不等于“eco”..现在问题是当我这样做时..查询只得到不等于'eco'的person_id ...但我想从查询中选择每个person_id,如果sub_table中的person_id等于'eco',则选择count 0:

    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

【问题讨论】:

  • 您使用的是哪个 DBMS?
  • sql server express 2008

标签: sql sql-server sql-server-2008


【解决方案1】:

问题在于您将 INNER 加入您的 sub_table,因此根据定义,您将结果限制为仅在此表中具有不等于 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;

【讨论】:

    【解决方案2】:
    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-02
      相关资源
      最近更新 更多