J’ai une base dont une des colonnes contient des données de
type dates, j’assaye de créer 2 nouvelles colonnes à partir des données de ces
dates. J’ai besoin de créer une colonne ANNEE N et une colonne ANNEE N-1 afin
de comparer des activités entre 2 années consécutives. Etant débutant, je
rencontre des difficultés, pour aboutir à un tel résultat, j’ai essayé quelque
chose de ce goût la :
hymnuade
Messages postés39Date d'inscriptionmardi 21 décembre 2004StatutMembreDernière intervention15 février 2010 8 nov. 2008 à 14:37
Salut,
Ta requête contient un UNION ce qui implique l'association de plusieurs résultats de requêtes, donc la première colonne de ta première partie de requête correspondra à ta première colonne de seconde requête. En l'espèce, ANNEE N-1 dans ta seconde requête apparaître dans les résultats de ANNEE N.
Pour faire ce que tu veux, tu peux plutôt t'orienter vers :
Ta table contient 3 colonnes Date | Annee | Annee N-1
Si seul Date est remplie tu dis mettre les 2 autres colonnes à jour.
Si Anne et Annee N-1 sont des colonnes de type entier, par exemple
UPDATE MyTable SET Annee DATEPART(year,Date), [Annee N-1] DATEPART(year, Date) - 1
Ta table sera donc mise à jour.
Tu peux faire le -1 pour annee N-1 car DATEPART sur year te renvoie un numérique.
pintux
Messages postés21Date d'inscriptionmardi 23 juin 2009StatutMembreDernière intervention23 juin 2009 12 nov. 2008 à 10:06
Bonjour hymuade,
Ce que tu dis est tout à fait exact, c'est pourquoi j'ai trouvé une solution de contournement par:
Year(DATE)'ANNEE N-1',
0
'ANNEE N',
Month(DATE)AS MOIS,
from
MyTable WITH(NOLOCK)
whereYear(DATE)=@pAnnee-1
groupbyYear(DATE),Month(DATE)
UNION
select
0
'ANNEE N-1',
Year(DATE)'ANNEE N',
Month(DATE)AS MOIS,
from MyTable WITH(NOLOCK)
whereYear(DATE)=@pAnnee
groupbyYear(DATE_),Month(DATE)
ORDERBYYear(DATE)
DESC,Month(DATE)DESC;
Cela permet de répondre à la contrainte, qui était la création et le peuplement de 2 colonnes à partir d'une troisième colonne et en fonction des données extraient.
J'espère que cela pourra être utile à d'autres personnes, en tout cas merci pour tes remarques , toutes à fait judicieuses.