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

Откуда: Москва
Сообщений: 191
MSSQL 2005
не подскажите как сделать из таких данных
 FIO              Status      Count 
Миронова	выполнено	1
Миронова	подтверждено	9

вот такие (по условию Status='выполнено')
 FIO              Status      Count All
Миронова	выполнено	1   10

как нужно сгруппировать правильно
сейчас запрос такой
select rExecuter as FIO, rStatus as Status, count(rExecuter) as Count
  from LSDBO.Ric_Get_attrRequest(0,100004487800000,'Деп,Подч,ПлРб,Req','','',0,'') 
  where DATEDIFF(day, rdStatus, GETDATE())>= 45  and rExecuter like '%'+ 'Миронова' +'%'
Group by rExecuter, rStatus

?
1 ноя 13, 09:11    [15062444]     Ответить | Цитировать Сообщить модератору
 Re: группировка по условию с общим итогом  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
ef1,

А каким образом

Миронова	подтверждено	9

попало под условие

автор
Status='выполнено'


?!
1 ноя 13, 09:23    [15062475]     Ответить | Цитировать Сообщить модератору
 Re: группировка по условию с общим итогом  [new]
ef1
Member

Откуда: Москва
Сообщений: 191
нет не попало... (в запросе нет)
мне нужно из всех Мироновых отобрать сколько 'выполнено' и сколько всего и отобразить одной строкой
1 ноя 13, 09:25    [15062479]     Ответить | Цитировать Сообщить модератору
 Re: группировка по условию с общим итогом  [new]
ef1
Member

Откуда: Москва
Сообщений: 191
типа так
select rExecuter as FIO, rStatus as Status, count(rExecuter) as Count
  from LSDBO.Ric_Get_attrRequest(0,100004487800000,'Деп,Подч,ПлРб,Req','','',0,'') 
  where DATEDIFF(day, rdStatus, GETDATE())>= 45  and rExecuter like '%'+ 'Миронова' +'%'
--       and rStatus='выполнено'
Group by rExecuter, rStatus

только rStatus='выполнено' вынести группировку
а как это правильно сделать...?
1 ноя 13, 09:27    [15062494]     Ответить | Цитировать Сообщить модератору
 Re: группировка по условию с общим итогом  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
SELECT
  FIO,
  SUM(CASE WHEN Status = 'выполнено' THEN Count ELSE 0 END) AS Count,
  SUM(Count) AS All
GROUP BY
  FIO
1 ноя 13, 09:28    [15062496]     Ответить | Цитировать Сообщить модератору
 Re: группировка по условию с общим итогом  [new]
prog882
Guest
ef1,
declare @t table (fio varchar(max), status varchar(max))
insert into @t
select 'Миронова','выполнено' union all
select 'Миронова','подтверждено' union all
select 'Миронова','подтверждено' union all
select 'Миронова','подтверждено' union all
select 'Миронова','подтверждено' union all
select 'Миронова','подтверждено' union all
select 'Миронова','подтверждено' union all
select 'Миронова','подтверждено' union all
select 'Миронова','подтверждено' union all
select 'Миронова','подтверждено'

select top 1 * from (
select fio, status, 
cnt=count(*) over(partition by fio, status),
allcnt=count(*) over(partition by fio)
from @t ) 
t 
where status = 'выполнено'
1 ноя 13, 09:41    [15062552]     Ответить | Цитировать Сообщить модератору
 Re: группировка по условию с общим итогом  [new]
ef1
Member

Откуда: Москва
Сообщений: 191
pkarklin Спасибо!!! все запустилось!))
Select
  rExecuter,
  SUM(CASE WHEN rStatus = 'выполнено' THEN 1 ELSE 0 END) AS vCount,
  SUM(1) AS vAll
 From LSDBO.Ric_Get_attrRequest(0,100004487800000,'Деп,Подч,ПлРб,Req','','',0,'') 
  where DATEDIFF(day, rdStatus, GETDATE())>= 45  and rExecuter like '%'+ 'Миронова' +'%'
GROUP BY
  rExecuter
1 ноя 13, 09:50    [15062598]     Ответить | Цитировать Сообщить модератору
 Re: группировка по условию с общим итогом  [new]
prog882
Guest
ef1, или:

select fio, status, cnt=count(*), allcnt=@@rowcount 
from @t 
where status = 'выполнено'
group by fio, status
1 ноя 13, 09:51    [15062603]     Ответить | Цитировать Сообщить модератору
 Re: группировка по условию с общим итогом  [new]
ef1
Member

Откуда: Москва
Сообщений: 191
prog882 спасибо за @@мысль!!!!))
select rExecuter, rStatus,  cnt=count(*), allcnt=@@rowcount 
 From LSDBO.Ric_Get_attrRequest(0,100004487800000,'Деп,Подч,ПлРб,Req','','',0,'') 
  where DATEDIFF(day, rdStatus, GETDATE())>= 45 and rExecuter like '%'+ 'Миронова' +'%' and rStatus = 'выполнено'
group by rExecuter, rStatus

но функция @@rowcount в этом месте вернула число строк = 1
1 ноя 13, 10:04    [15062659]     Ответить | Цитировать Сообщить модератору
 Re: группировка по условию с общим итогом  [new]
prog882
Guest
ef1, попробуйте
, allcnt=ROWCOUNT_BIG() 
1 ноя 13, 11:02    [15062998]     Ответить | Цитировать Сообщить модератору
 Re: группировка по условию с общим итогом  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Функции @@ROWCOUNT и ROWCOUNT_BIG возвращают число строк, обработанных предыдущей командой. Так что здесь они как-то не в тему.
1 ноя 13, 11:57    [15063530]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить