Несколько COUNT -ов в одном запросе по разным критериям?

Dmitry.Savtchin
Дата: 14.09.2006 17:43:19
Такое возможно?

Имеется след 3 табл.
Список контактов.

CREATE TABLE [dbo].[ContactLists] (
[ContactListId] bigint IDENTITY(1, 1) NOT NULL,
[CustomerId] bigint NOT NULL,
[Name] nvarchar(50) ,
)

Кросик на Контакты
CREATE TABLE [dbo].[ContactListContact] (
[ContactListId] bigint NOT NULL,
[ContactId] bigint NOT NULL,
)

Контакты
CREATE TABLE [dbo].[Contacts] (
[ContactId] bigint IDENTITY(1, 1) NOT NULL,
[CustomerId] bigint NOT NULL,
[LastName] nvarchar(50) ,
[FirstName] nvarchar(50) ,
[Email] nvarchar(250) ,
[ContactStatusId] int NOT NULL,
)

Просто появилась необходимость сделать следующую выборку:
Выбрать все Списки Контактов определенного CustomerId, Вывести их название, кол-во всех контактов и кол-во контактов со ContactStatusId=3

Можно ли это сделать одним запросом ?

Заранее спасибо
Prolog
Дата: 14.09.2006 17:48:55
все контакты
count(*)
кол-во контактов со ContactStatusId=3
sum(case when ContactStatusId=3 then 1 else 0 end)
BugsBunny
Дата: 14.09.2006 17:49:07
are you talking about sigle SELECT or single QUERY?
Do you know that MSSQL supports inline subqueries?
ChA
Дата: 14.09.2006 17:49:37
Замени COUNT на SUM(CASE ContactStatusId WHEN 3 THEN 1 END)
Dmitry.Savtchin
Дата: 14.09.2006 17:53:11
Спасибо за помощь.
Нужно видимо опять мне развивать гибкость SQL мышления
:)
BugsBunny
Дата: 14.09.2006 19:03:43
ChA
Замени COUNT на SUM(CASE ContactStatusId WHEN 3 THEN 1 END)


For "CASE ContactStatusId WHEN 3 THEN 1 END" it can be COUNT as well
ChA
Дата: 14.09.2006 19:27:56
BugsBunny
ChA
Замени COUNT на SUM(CASE ContactStatusId WHEN 3 THEN 1 END)


For "CASE ContactStatusId WHEN 3 THEN 1 END" it can be COUNT as well
Извини, возможно не совсем понял фразу. Если ты про это
SELECT COUNT( CASE ContactStatusId WHEN 3 THEN 1 END)
FROM (
SELECT 0 AS ContactStatusId
UNION ALL SELECT 3
UNION ALL SELECT NULL
UNION ALL SELECT 3
) t
, то, разумеется, можно, но с SUM наглядней, IMHO, а по скорости выполнения практически то же самое.
BugsBunny
Дата: 14.09.2006 19:38:12
ChA
...Извини, возможно не совсем понял фразу...

my fault.
i meant due to implicit null in the expression
SUM(CASE ContactStatusId WHEN 3 THEN 1 END) = COUNT(CASE ContactStatusId WHEN 3 THEN 1 END)