Отображение строк в SQL Server, где COUNT = 0 - PullRequest
3 голосов
/ 07 июля 2011

Следующий запрос возвращает только имена регионов для регионов, в которых были заказы.

   SELECT r.RegionName,
          COUNT (DISTINCT o.uid)
     FROM Orders AS o
LEFT JOIN Customers AS c ON o.CustomerID = c.uid
LEFT JOIN Regions AS r ON c.Region = r.uid
    WHERE (r.RegionName NOT LIKE 'NULL') 
      AND (r.RegionName <> '') 
      AND (r.RegionName NOT LIKE 'Region 1') 
      AND (o.DateOrdered LIKE '7%2011%')
 GROUP BY r.RegionName
 ORDER BY r.RegionName

Как я могу изменить его так, чтобы все имена регионов отображались, даже если "COUNT" равен "0"?

1 Ответ

6 голосов
/ 07 июля 2011

Вам нужно либо изменить JOIN на Regions на RIGHT JOIN, либо сделать Regions таблицей FROM, а затем JOIN на другие таблицы оттуда.метод, так как он кажется более интуитивным для меня.Вы заботитесь о регионах здесь, и вы пытаетесь получить информацию о регионах, так что должно быть в FROM (IMO):

SELECT
    R.RegionName,
    COUNT(O.uid)
FROM
    Regions R
LEFT OUTER JOIN Customers C ON C.Region = R.uid  -- I really don't like this naming convention
LEFT OUTER JOIN Orders O ON
    O.CustomerID = C.uid AND
    O.DateOrdered LIKE '7%2011%'  -- Is your date really stored as a string? Ugh!
WHERE
    R.RegionName <> 'NULL' AND   -- This is VERY bad...
    R.RegionName <> '' AND
    R.RegionName <> 'Region 1'
GROUP BY
    R.RegionName
ORDER BY
    R.RegionName
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...