T-SQL - включить сумму счета (*) в один запрос - PullRequest
4 голосов
/ 04 апреля 2011

Используя таблицу i, а также поля date_entered и code, я написал запрос, чтобы вывести список для каждого года, где code = '12A'.

select distinct year(date_entered) as Yr, count(*) as Cnt
from i
where code = '12A'
group by year(date_entered)
order by Yr desc

Это производит:

Yr   |    Cnt
2011   |  780
2010   |  3489
2009   |  3256
...

Я хочу включить сумму переменной Cnt в мой набор результатов. Я знаю, как найти сумму, используя отдельный запрос, но я хотел бы вычислить сумму в моем исходном запросе.

Ответы [ 3 ]

12 голосов
/ 04 апреля 2011

Добавьте WITH ROLLUP к запросу после предложения GROUP BY, и вы получите дополнительную строку с NULL Yr, которая содержит ваш итоговый итог.

select year(date_entered) as Yr, count(*) as Cnt
from i
where code = '12A'
group by year(date_entered)
with rollup
order by Yr desc
3 голосов
/ 04 апреля 2011
;WITH cte
     AS (SELECT YEAR(date_entered) AS yr,
                COUNT(*)           AS cnt
         FROM   i
         WHERE  code = '12A'
         GROUP  BY YEAR(date_entered))
SELECT yr,
       cnt,
       SUM(cnt) OVER () AS totcnt
FROM   cte
ORDER  BY yr DESC  
2 голосов
/ 04 апреля 2011

Создайте подзапрос и включите результаты в основной запрос

select 
      year(date_entered) as Yr, 
      count(*) as Cnt, 
      t.MySum 
from 
      i     
INNER JOIN (
            SELECT 
                  SUM(MyColumn) as MySum 
            FROM 
                  i                
            WHERE 
                  code='12A'
            ) t 
ON 
      t.ID = MyTable.ID
where 
      code = '12A' 
group by 
      year(date_entered) 
order by 
      Yr desc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...