Мне нужно подсчитать и сгруппировать записи, хранящиеся в SQL Server 2003, по объединенной строке Year Week - PullRequest
1 голос
/ 17 февраля 2011

Меня попросили отобразить данные, хранящиеся в SQL Server.Это я могу сделать с помощью имеющихся у меня инструментов.

Однако меня попросили подсчитать количество записей в базе данных, сгруппировать их на основе комбинации двух последних цифр года и номера недели.

Например, первая неделя 2011 года будет 1101
Например, пятнадцатая неделя 2010 года будет 1015

(обратите внимание, что неделя должна быть в 2 знака), поэтому индексируйте по алфавиту

Я пробовал различные комбинации, такие как

select CASE WHEN DATENAME(ww,j.requestedat) <= 9
            THEN (CAST('0' AS VARCHAR(1)) + CAST(DATENAME(ww,j.requestedat) AS VARCHAR(1)))
            ELSE CAST(DATENAME(ww,j.requestedat) AS VARCHAR(2))
         END AS WeekNumber
         , right(DateName(yy, j.requestedat),2) + WeekNumber as YYWW
from
    facts_reactive.dbo.jobs j 
order by j.requestedat

, но все не удалось.

Любая помощь / руководство с благодарностью приняты.

Роб

Ответы [ 3 ]

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

Попробуйте это:

SELECT RIGHT(YEAR(j.requestedat),2) + RIGHT('00'+CAST(DATEPART(ww,j.requestedat) AS VARCHAR(2)),2) YYWW
FROM facts_reactive.dbo.jobs j  
ORDER BY j.requestedat 
1 голос
/ 17 февраля 2011
SELECT
  YYWW = RIGHT(YEAR(j.requestedat) * 100 + DATEPART(ww, j.requestedat), 4)
FROM facts_reactive.dbo.jobs j
ORDER BY j.requestedat
1 голос
/ 17 февраля 2011

попробуйте это:

select
    right(DateName(yy, wn.requestedat),2) + wn.WeekNumber as YYWW
from
    (
        select CASE WHEN DATENAME(ww,j.requestedat) <= 9
                THEN (CAST('0' AS VARCHAR(1)) + CAST(DATENAME(ww,j.requestedat) AS VARCHAR(1)))
                ELSE CAST(DATENAME(ww,j.requestedat) AS VARCHAR(2))
             END as WeekNumber, j.requestedat
        from
            facts_reactive.dbo.jobs j      
    ) AS wn
order by wn.requestedat
...