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

pintux Messages postés 21 Date d'inscription mardi 23 juin 2009 Statut Membre Dernière intervention 23 juin 2009 - 8 nov. 2008 à 10:28
pintux Messages postés 21 Date d'inscription mardi 23 juin 2009 Statut Membre Dernière intervention 23 juin 2009 - 12 nov. 2008 à 10:06
<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

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

Cordialement

Philippe
0
Rejoignez-nous