Сводная строка рассчитывает в столбце отношений?(в MS-SQL) - PullRequest
1 голос
/ 08 марта 2012

У меня следующий запрос:

select a.IsCancelled, count(*) from tblTask a
    inner join tblTicket t on a.TicketID = t.TID
    group by a.IsCancelled

, который дает мне что-то вроде:

IsCancelled      Count
0                7851
1                11235

Скажем, я хотел добавить еще один столбец с процентами относительно каждой строки,Я должен получить следующее:

IsCancelled      Count     Ratio
0                7851      0.41135
1                11235     0.58865

Это называется Pivot, правильно?Как бы я выполнить этот расчет?Что я добавлю к моему запросу выше, чтобы это произошло?Спасибо;)

РЕАЛИЗАЦИЯ

Я закончил тем, что немного изменил ответ Дахо следующим образом:

declare @tbl table (IsCancelled bit, [Count] int)
insert into @tbl
    select a.IsCancelled, count(*) [Count] from tblTask a
        inner join tblTicket t on a.TicketID = t.TID
        group by a.IsCancelled
select IsCancelled, [Count], round(cast([Count] as float)/(select sum([Count])
    from @tbl),5) [Ratio] from @tbl

Ответы [ 3 ]

2 голосов
/ 08 марта 2012

попробуйте следующее

DECLARE @Total INT

SELECT @Total = select count(1) from tblTask

select a.IsCancelled, count(1), count(1)/@Total
from tblTask a
inner join tblTicket t on a.TicketID = t.TID
group by a.IsCancelled
2 голосов
/ 08 марта 2012

Вам придется использовать подзапрос.Приведенный ниже запрос должен работать в sqlserver и mysql, но я не уверен, что он будет работать когда-либо в rdbms.

select a.IsCancelled, count(*), count(*)/(select count(*) from tblTask) 
from tblTask a
inner join tblTicket t on a.TicketID = t.TID
group by a.IsCancelled

Альтернативным способом ...

select a.IsCancelled, count(*), count(*)/totalcount
from tblTask a,
tblTicket t,
(select IsCancelled, count(*) as totalcount from tblTask) as tablecount, 
where a.TicketID = t.TID
group by a.IsCancelled

Ключ здесь заключается в том, чтобы сделать это в одном запросе или транзакции, иначе ваш счетчик может измениться с одного запроса на следующий.*

1 голос
/ 08 марта 2012

Если вы используете SQL Server 2005 или более позднюю версию:

SELECT
  a.IsCancelled,
  Count = COUNT(*),
  Ratio = COUNT(*) * 1.0 / SUM(COUNT(*)) OVER ()
FROM tblTask a
  INNER JOIN tblTicket t ON a.TicketID = t.TID
GROUP BY a.IsCancelled

Ссылки:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...