SQL Server - групповые записи как архивы по месяцам - PullRequest
3 голосов
/ 17 февраля 2011

У меня есть таблица Fixture с тремя полями.

ID | Fixture | Date
-------------------------
1  | 123456  |  20110515
2  | 123446  |  20110512
3  | 123476  |  20110411
4  | 123486  |  20110310

... и так далее.

Мне нужно сгруппировать записи по дате и я хочу получить количество осветителей.

Результаты будут отображаться, как в следующем примере.Как мне добиться результатов от SQL Query?

Archives

February 2011 (3)
January 2011 (6)
December 2010 (10)
November 2010 (7)
October 2010 (5)

Мне нужна помощь сообщества, чтобы решить эту проблему, пожалуйста, помогите мне.

Ответы [ 5 ]

4 голосов
/ 17 февраля 2011

Как насчет чего-то вроде

DECLARE @Table TABLE(
        ID INT,
        Fixture INT,
        Date DATETIME
)
INSERT INTO @Table SELECT 1,123456,'20110515' 
INSERT INTO @Table SELECT 2,123446,'20110512' 
INSERT INTO @Table SELECT 3,123476,'20110411' 
INSERT INTO @Table SELECT 4,123486,'20110310'

;WITH Vals AS (
        SELECT  DATENAME(month,Date) + ' ' + CAST(DATEPART(year,Date) AS VARCHAR(4)) DateValue,
                ID,
                CONVERT(VARCHAR(6), Date, 112) OrderValue 
        FROM    @Table
)
SELECT  DateValue,
        COUNT(ID) Cnt
FROM    Vals
GROUP BY    DateValue,
            OrderValue
ORDER BY    OrderValue
3 голосов
/ 17 февраля 2011

Попробуйте, у него есть номера месяцев, вы можете обновить его в своем коде или в sql

 select COUNT(id), DATEPART(year, dtCreated) as y, DATEPART(MONTH,dtCreated) as mo 
    from TaxesSteps group by DATEPART(year, dtCreated), DATEPART(MONTH,dtCreated)
    order by 2 desc, 3 desc
3 голосов
/ 17 февраля 2011

Я считаю, что этот код будет делать то, что вам нужно:

SELECT
    DATENAME(m, [Date]) + ' ' + CAST(YEAR([Date]) AS VARCHAR(4)) AS ArchiveMonth
    ,COUNT(ID) AS Items
FROM
    Fixture
GROUP BY
    DATENAME(m, [Date]) + ' ' + CAST(YEAR([Date]) AS VARCHAR(4))

(черт возьми ... уже избит)

2 голосов
/ 17 февраля 2011
Declare @table table (ID bigint identity(1,1), Fixture nvarchar(100), [Date] nvarchar(100))

INSERT INTO @table values ('123456','20110515')
INSERT INTO @table values ('123256','20110410')
INSERT INTO @table values ('123356','20110511')
INSERT INTO @table values ('122456','20110503')

--select DATEPART(month,0, (cast([date],datetime) from @table
SELECT DATENAME(month, CAST([Date] as datetime))+ ' ' + DATENAME(Year,CAST([Date] as datetime)) + ' (' + CAST(COUNT(Fixture) as varchar(100)) + ') '
from @table
group by DATENAME(month, CAST([Date] as datetime))+ ' ' + DATENAME(Year,CAST([Date] as datetime))
1 голос
/ 17 февраля 2011

Я даю вам три варианта , с 3 отображаемыми выходами

Опция # 1

select   convert(char(6), Date, 112) MonthYear, count(*) CountFixtures
from     Fixture
group by convert(char(6), Date, 112)
order by convert(char(6), Date, 112)

Выход № 1 - самый базовый.Интерфейс может определить названия месяцев и лет:

MonthYear CountFixtures
--------- -------------
201103    1
201104    1
201105    2


Опция # 2

select   datename(month, convert(datetime,convert(char(6), Date, 112)+'01'))
         + ' '
         + left(convert(char(6), Date, 112),4) MonthYear,
         count(*) CountFixtures
from     Fixture
group by convert(char(6), Date, 112)
order by convert(char(6), Date, 112)

Выход № 2 - рекомендуется.Подсчет и даты являются отдельными полями

MonthYear                           CountFixtures
----------------------------------- -------------
March 2011                          1
April 2011                          1
May 2011                            2

Опция # 3

select   datename(month, convert(datetime,convert(char(6), Date, 112)+'01'))
         + ' '
         + left(convert(char(6), Date, 112),4)
         + ' ('
         + convert(varchar,count(*))
         + ')' FixturesByMonth
from     Fixture
group by convert(char(6), Date, 112)
order by convert(char(6), Date, 112)

Выход # 3 - точно , как у вас в вопросе, в скобках,Однако я твердо верю, что форматирование (скобки и др.) - это задача переднего плана, а не сторона SQL Server.

FixturesByMonth
----------------
March 2011 (1)
April 2011 (1)
May 2011 (2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...