Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Нужна помощь в формировании отчета (хранимая процедура)  [new]
ИльдарSR
Member

Откуда:
Сообщений: 466
Добрый день.


Нужна помощь!

Задача вывести резалсет с полями.
И по нему подвести итоги:
1.Всего сообщений
2.Доставлено всего
3.Не доставлено


Как сделать одним запросом.
Делаю след образом :


SELECT incoming_id,
i.a_number,
i.b_number,
i.time_come_msg,
i.delivery_date,
m.name
FROM incoming i INNER JOIN log_table l ON(i.incoming_id = l.message_id)
INNER JOIN message_status_c m ON(m.message_status_id = l.message_status_id)
WHERE time_come_msg BETWEEN @start_time AND @end_time
ORDER BY time_come_msg ASC
COMPUTE count(incoming_id)

Всего могу вывести /*COMPUTE count(incoming_id)*/ а как остальные вывести.


Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86)
Jul 9 2008 14:43:34
Copyright (c) 1988-2008 Microsoft Corporation
Developer Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 3)



Заранее благодарен.
23 дек 09, 13:50    [8107212]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь в формировании отчета (хранимая процедура)  [new]
iljy
Member

Откуда:
Сообщений: 8711
ИльдарSR,

count(incoming_id),count(case when Доставлено then 1 end), count(case when Не доставлено then 1 end)
23 дек 09, 14:35    [8107596]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь в формировании отчета (хранимая процедура)  [new]
M0us
Member

Откуда: Moscow
Сообщений: 883
ИльдарSR

Задача вывести резалсет с полями.
И по нему подвести итоги:
1.Всего сообщений
2.Доставлено всего
3.Не доставлено


select count(I.incoming_id) as [Всего сообщений]
count(I2.incoming_id) as [Доставлено всего]
count(I3.incoming) as [Не доставлено]
from incoming I
left join incoming INCM ON I.message_id = I2.message_id and Доставлено = 1
left join incoming OUTM ON I.message_id = I3.message_id and Не Доставлено = 1
23 дек 09, 14:42    [8107662]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь в формировании отчета (хранимая процедура)  [new]
ИльдарSR
Member

Откуда:
Сообщений: 466
iljy

Большое спасибо!!!
23 дек 09, 14:43    [8107671]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь в формировании отчета (хранимая процедура)  [new]
M0us
Member

Откуда: Moscow
Сообщений: 883
ошибся в оформлении. исправляю:

select count(I.incoming_id) as [Всего сообщений]
count(I2.incoming_id) as [Доставлено всего]
count(I3.incoming) as [Не доставлено]
from incoming I
left join incoming I2 ON I.message_id = I2.message_id and Доставлено = 1
left join incoming I3 ON I.message_id = I3.message_id and Не Доставлено = 1
23 дек 09, 14:43    [8107676]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь в формировании отчета (хранимая процедура)  [new]
ИльдарSR
Member

Откуда:
Сообщений: 466
M0us

Спасибо большое!!!
23 дек 09, 14:43    [8107681]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь в формировании отчета (хранимая процедура)  [new]
iljy
Member

Откуда:
Сообщений: 8711
M0us
ошибся в оформлении. исправляю:

select count(I.incoming_id) as [Всего сообщений]
count(I2.incoming_id) as [Доставлено всего]
count(I3.incoming) as [Не доставлено]
from incoming I
left join incoming I2 ON I.message_id = I2.message_id and Доставлено = 1
left join incoming I3 ON I.message_id = I3.message_id and Не Доставлено = 1


эээ.... это такая фича - 3 раза прочитать таблицу вместо одного??

select count(I.incoming_id) as [Всего сообщений]
count(case when Доставлено = 1 then 1 end) as [Доставлено всего]
count(case when Доставлено != 1 then 1 end) as [Не доставлено]
from incoming I
Зачем это тройное сканирование, вы сервер в человека трудом превращаете?
23 дек 09, 15:08    [8107959]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь в формировании отчета (хранимая процедура)  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31173
iljy
M0us
ошибся в оформлении. исправляю:

select count(I.incoming_id) as [Всего сообщений]
count(I2.incoming_id) as [Доставлено всего]
count(I3.incoming) as [Не доставлено]
from incoming I
left join incoming I2 ON I.message_id = I2.message_id and Доставлено = 1
left join incoming I3 ON I.message_id = I3.message_id and Не Доставлено = 1


эээ.... это такая фича - 3 раза прочитать таблицу вместо одного??

select count(I.incoming_id) as [Всего сообщений]
count(case when Доставлено = 1 then 1 end) as [Доставлено всего]
count(case when Доставлено != 1 then 1 end) as [Не доставлено]
from incoming I
Зачем это тройное сканирование, вы сервер в человека трудом превращаете?

Или так, если "Доставлено" не может быть null:
select count(I.incoming_id) as [Всего сообщений]
sum(Доставлено) as [Доставлено всего]
sum(1-Доставлено) as [Не доставлено]
from incoming I
23 дек 09, 15:42    [8108279]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить