2013-07-01 7 views
-1

Nous utilisons une table de recherche dans une base de données pour regrouper des semaines, des mois et des années. Malheureusement, le gars qui l'a créé a disparu depuis longtemps et le calendrier s'achève à la fin de l'année! Donc j'ai vraiment besoin de trouver un moyen d'y ajouter! Son mis en place avec les colonnes suivantes:Création d'un calendrier en SQL

enter image description here

Je ne suis pas très bon dans sql (MS2008) pour être honnête et ive stuggeled avec elle, nous ne pouvons pas mettre quelque chose de nouveau comme tout est construit autour de cela!

+0

Vous dites que vous ne pouvez pas définir quelque chose de nouveau, donc ce que vous essayez d'atteindre alors? Vous avez déjà mis en place la table dans votre feuille Excel, qui a un nombre illimité de lignes; pourquoi ne pas simplement ajouter à cela? Je n'ai pas vraiment le problème. – Eric

+0

Im essayant d'ajouter à la table actuelle dans la base de données, Excel fonctionne bien pour la date et cela, mais il ne fonctionne pas bien avec l'ID, il finit complètement. – GPH

+0

Cela ressemble aux deux premières lignes. Ajoutez les dernières lignes du tableau à votre message. –

Répondre

1

vous pouvez faire ça comme ça, mais je ne comprends pas pourquoi votre calendrier commence à partir de Mars?

declare @Date_Start date, @Date_End date 

select @Date_Start = '20130101' 
select @Date_End = '20131231' 

;with 
CTE_Dates as (
    select @Date_Start as [Date] 
    union all 
    select dateadd(dd, 1, [Date]) 
    from CTE_Dates 
    where [Date] < @Date_End 
), 
CTE_Calendar as (
    select 
     [Date], 
     datename(dw, [Date]) as [Day], 
     datepart(ww, [Date]) as [Week], 
     datepart(mm, [Date]) as [MonthID], 
     dateadd(mm, datediff(mm, 0, getdate()), 0) as [Month], 
     datepart(yy, [Date]) as [YearID], 
     dateadd(yy, datediff(yy, 0, getdate()), 0) as [Year], 
     datepart(qq, [Date]) as [QuarterID], 
     dateadd(qq, datediff(qq, 0, getdate()), 0) as [Quarter] 
    from CTE_Dates 
) 
select 
    row_number() over (order by [Date]) + @Start_ID - 1 as ID, 
    * 
from CTE_Calendar 
option (maxrecursion 0) 

SQL FIDDLE EXAMPLE

+0

C'est parfait! quant à la chose de mars, je n'en ai aucune idée non plus! Merci! – GPH

+0

Des pensées sur ce que je peux faire à propos des champs d'identification? ils ont besoin d'augmenter au fil des semaines. Par exemple, quand j'ai atteint la semaine 52 dans une année, il faut encore incrémenter automatiquement pour l'ID (semaine 1 dans la nouvelle année serait la semaine ID 53) – GPH

+0

a changé une réponse un peu –