Подсчитать количество недель - PullRequest
3 голосов
/ 20 сентября 2011

У меня есть таблица с именем Calendar, и данные выглядят так:

Date                         Week_Num       Month_Year
1996-01-27 00:00:00.000      1021            01/1997
1996-01-28 00:00:00.000      1021            01/1997
1996-01-29 00:00:00.000      1021            01/1997
1996-02-03 00:00:00.000      1022            01/1997
1996-02-04 00:00:00.000      1022            01/1997
1996-02-10 00:00:00.000      1023            01/1997
1996-02-11 00:00:00.000      1023            01/1997

Я хочу вычислить количество недель в месяце_год:

Я написал запрос как:

Select Month_year,Count(*)
From (Select Week_Num,Month_year
      From Calendar
      Group By Week_Num,Month_year
      )a
Group By Month_year
order by Month_year

Это дает мне то, что я хочу, но есть ли лучший способ сделать это?

Ответы [ 2 ]

4 голосов
/ 20 сентября 2011
SELECT Month_Year, COUNT(DISTINCT Week_Num)
FROM Calendar
GROUP BY Month_Year

Это устраняет один уровень агрегации и является гораздо более читабельным. Я не уверен, что это будет работать лучше.

ОБРАЗЕЦ ДЛЯ ДОКАЗАТЕЛЬСТВА КОНЦЕПЦИИ:

DECLARE @t table (DT smalldatetime, week_num int, month_year varchar(100))

INSERT INTO @t
VALUES
('1996-01-27 00:00:00.000', 1021,'01/1997'),
('1996-01-28 00:00:00.000', 1021,'01/1997'),
('1996-01-29 00:00:00.000', 1021,'01/1997'),
('1996-02-03 00:00:00.000', 1022,'01/1997'),
('1996-02-04 00:00:00.000', 1022,'01/1997'),
('1996-02-10 00:00:00.000', 1023,'01/1997'),
('1996-02-11 00:00:00.000', 1023,'01/1997')

SELECT Month_Year, COUNT(DISTINCT Week_Num)
FROM @t
GROUP BY Month_Year

Возвращает:

Month_Year  (No column name)
01/1997         3
1 голос
/ 20 сентября 2011

Я это то, что вам нужно:

Select Month_year,Count(distinct Week_Num)
From Calendar
Group By Month_year
order by Month_year
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...