Чтобы получить нулевое значение для статуса P, вам нужно сделать некоторые коварные вещи, используя таблицу, в которой перечислены все возможные статусы.
SELECT COUNT(A.Status), B.Status
FROM AnonymousTable AS A RIGHT OUTER JOIN
(SELECT 'P' AS Status FROM Dual
UNION
SELECT 'U' AS Status FROM Dual
UNION
SELECT 'L' AS Status FROM Dual
UNION
SELECT 'T' AS Status FROM Dual
) AS B ON A.Status = B.Status
GROUP BY B.Status;
4-way UNION - один из способов генерации списка значений; ваша СУБД может предоставить более компактные альтернативы. Я предполагаю, что таблица Dual содержит только одну строку (как показано в Oracle).
COUNT (A.Status) подсчитывает количество ненулевых значений в A.Status. RIGHT OUTER JOIN отображает строку из B с Status = 'P' и соединяет ее с единственным NULL для A.Status, который, следовательно, COUNT (A.Status) считается равным нулю. Если вы использовали COUNT (*), вы получите 1 для подсчета.
Какой двигатель базы данных вы используете? – Kris
Получение нулевого значения для P, которое не появляется, является жесткой частью этого. Вам понадобится список допустимых значений в какой-либо таблице, с которой вы сможете работать. –
Я использую sql server 2008. в любом случае thx много. я решил проблему после прочтения сообщений :) – scatman