在SQL中存在

时间:2019-05-01 19:23:54

标签: sql sql-server

该查询为什么不返回结果计数?如何显示计数

SELECT COUNT (*) AS MWith
FROM member   m
JOIN Channel  mc ON mc.MemberID = m.id
JOIN Client   c  ON c.id = m.clientid
JOIN packages p  ON p.id = m.packageid
WHERE Enroll > '2018'
AND EXISTS  (
            SELECT * FROM
            activity a 
            WHERE a.memberid = m.id
            AND a.code IN ('785', 'a599')
            ) 
GROUP BY m.id;

输出

MWith
1
1
1

1 个答案:

答案 0 :(得分:1)

空集是因为子句group by

解决方法是:

  1. 删除GROUP BY,因为无论如何m.id都不是输出的一部分
  2. 使用GROUP BY ALL

原始示例:

SELECT COUNT(*) AS MWith
FROM member m
    JOIN Channel mc
        ON mc.MemberID = m.id
    JOIN Client c
        ON c.id = m.clientid
    JOIN packages p
        ON p.id = m.packageid
WHERE Enroll > '2018'
      AND EXISTS
(
    SELECT *
    FROM activity a
    WHERE a.memberid = m.id
          AND a.code IN ( '785', 'a599' )
)
--   GROUP BY m.id;

其他更简单的示例来显示差异:

-- returns an empty resultset
SELECT COUNT(*) FROM sys.databases
WHERE 1=0
GROUP BY name

-- returns: a single row with 0
SELECT COUNT(*) FROM sys.databases
WHERE 1=0

-- Another example with GROUP BY ALL
-- it returns one row per grouped value, with expected count = 0
SELECT COUNT(*) FROM sys.databases
WHERE 1=0
GROUP BY ALL name
相关问题