Créer 2 colonne à partir des données d'une troisième

Signaler
Messages postés
21
Date d'inscription
mardi 23 juin 2009
Statut
Membre
Dernière intervention
23 juin 2009
-
Messages postés
21
Date d'inscription
mardi 23 juin 2009
Statut
Membre
Dernière intervention
23 juin 2009
-
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="ProgId" content="Word.Document" />
<meta name="Generator" content="Microsoft Word 11" />
<meta name="Originator" content="Microsoft Word 11" />
<link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CROGERR%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml" />
<o:smarttagtype namespaceuri="urn:schemas-microsoft-com:office:smarttags" name="place">
</o:smarttagtype>
<o:smarttagtype namespaceuri="urn:schemas-microsoft-com:office:smarttags" name="metricconverter">
</o:smarttagtype>
<!--[if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:HyphenationZone>21</w:HyphenationZone>
<w:PunctuationKerning/>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:Compatibility>
<w:BreakWrappedTables/>
<w:SnapToGridInCell/>
<w:WrapTextWithPunct/>
<w:UseAsianBreakRules/>
<w:DontGrowAutofit/>
</w:Compatibility>
<w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
</w:WordDocument>
</xml><![endif]-->
<!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState="false" LatentStyleCount="156">
</w:LatentStyles>
</xml><![endif]-->
<!--[if !mso]><object
classid="clsid:38481807-CA0E-42D2-BF39-B33AF135CC4D" id=ieooui></object>
<style>
st1\:*{behavior:url(#ieooui) }
</style>
<![endif]-->
<style>
<!--
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:12.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:"Times New Roman";}
@page Section1
{size:612.0pt 792.0pt;
margin:70.85pt 70.85pt 70.85pt 70.85pt;
mso-header-margin:36.0pt;
mso-footer-margin:36.0pt;
mso-paper-source:0;}
div.Section1
{page:Section1;}
-->
</style>
<!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Tableau Normal";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman";
mso-ansi-language:#0400;
mso-fareast-language:#0400;
mso-bidi-language:#0400;}
</style>
<![endif]-->
Bonjour à tous,


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 :



Declare @pAnnee
int





@pAnnée = ‘2008’





SELECT





Year(Date) ‘ANNEE
N’





FROM
MyTable





WHERE  Year(Date) IN (@pAnnée)






 






<st1:place w:st="on">
UNION
</st1:place>









 






SELECT





Year(Date) ‘ANNEE
N-<st1:metricconverter productid="1’" w:st="on">1’</st1:metricconverter>





FROM
MyTable





WHERE  Year(Date) IN (@pAnnée-1)






 





Mais visiblement Une seule colonne est crée (ANNNEE N), et cette
dernière regroupe toute les années!!!



 





 




MERCI pour toute aide apportée



 




Philippe

2 réponses

Messages postés
39
Date d'inscription
mardi 21 décembre 2004
Statut
Membre
Dernière intervention
15 février 2010

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.
Messages postés
21
Date d'inscription
mardi 23 juin 2009
Statut
Membre
Dernière intervention
23 juin 2009

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.

Cordialement

Philippe