CASE dans T-SQL
Résolu/Fermé
soleil_levant
Messages postés
393
Date d'inscription
lundi 15 septembre 2008
Statut
Membre
Dernière intervention
14 avril 2011
-
18 août 2009 à 17:26
soleil_levant Messages postés 393 Date d'inscription lundi 15 septembre 2008 Statut Membre Dernière intervention 14 avril 2011 - 19 août 2009 à 17:28
soleil_levant Messages postés 393 Date d'inscription lundi 15 septembre 2008 Statut Membre Dernière intervention 14 avril 2011 - 19 août 2009 à 17:28
A voir également:
- CASE dans T-SQL
- Aller à la ligne dans une case excel - Guide
- Récupération serveur sql - Télécharger - Gestion de données
- Comment cocher une case sur word ✓ - Forum Word
- Excel case ✓ - Forum Excel
- Cocher une case sans souris ✓ - Forum Windows
4 réponses
moderno31
Messages postés
870
Date d'inscription
mardi 23 juin 2009
Statut
Membre
Dernière intervention
8 août 2012
92
19 août 2009 à 11:44
19 août 2009 à 11:44
Hello, tu peux m'expliquer de nouveau j'ai pas compris ce que tu veux faire.
Tu es sur que ton case est bien placé ? Je ne crois pas. Plutot dans le select non ?
S'il s'agit de switcher sur plusieurs mois différents c'est dans ton programme que tu le gère ça
Tu es sur que ton case est bien placé ? Je ne crois pas. Plutot dans le select non ?
S'il s'agit de switcher sur plusieurs mois différents c'est dans ton programme que tu le gère ça
soleil_levant
Messages postés
393
Date d'inscription
lundi 15 septembre 2008
Statut
Membre
Dernière intervention
14 avril 2011
32
19 août 2009 à 12:04
19 août 2009 à 12:04
Bonjour,
Effectivement, je veux switcher entre les mois et année, c'est clair que le Case est mal placé, c'est une idée de ma part alors elle s'avère pas correcte. Mais le but est la.
Le but est de sélectionner les donnée sur 4 mois glissant. Si mon paramètre vaut 5 (mois avril) je dois sélectionner tjrs le mois antérieure et les 3 mois qui précédent. Si mon paramètre mois vaut 4, je sélectionne pour le mois 3 (mars) et la je dois réculer et entrer dans l'année antérieure pr prendre aussi le mois de 12 (décembre) ... Il faut généraliser donc tous les cas de figure.
Avez vous une idée s'il vour plaît.
Merci infiniment
Effectivement, je veux switcher entre les mois et année, c'est clair que le Case est mal placé, c'est une idée de ma part alors elle s'avère pas correcte. Mais le but est la.
Le but est de sélectionner les donnée sur 4 mois glissant. Si mon paramètre vaut 5 (mois avril) je dois sélectionner tjrs le mois antérieure et les 3 mois qui précédent. Si mon paramètre mois vaut 4, je sélectionne pour le mois 3 (mars) et la je dois réculer et entrer dans l'année antérieure pr prendre aussi le mois de 12 (décembre) ... Il faut généraliser donc tous les cas de figure.
Avez vous une idée s'il vour plaît.
Merci infiniment
Christounet
Messages postés
1264
Date d'inscription
mercredi 26 septembre 2007
Statut
Membre
Dernière intervention
29 juillet 2010
1 383
19 août 2009 à 16:22
19 août 2009 à 16:22
Bonjour soleil_levant,
Peut-être que le code suivant devrait faire ce que tu veux
J'ai testé ce code sur une table SQL SERVER , pas avec les mêmes variables mais cela fais (je pense) ce que tu veux. Cela suppose aussi que ton paramètre @Month est du type smallint
A plus
Peut-être que le code suivant devrait faire ce que tu veux
declare @Month1 smallint declare @Month2 smallint declare @Month3 smallint declare @Month4 smallint declare @Year1 smallint declare @Year2 smallint declare @Year3 smallint declare @Year4 smallint IF @Month <> '' AND @type_declaration LIKE '%REC%' BEGIN set @Month1 = @Month - 1 set @Year1 = YEAR(GETDATE()) If @Month1 = 0 BEGIN set @Month1 = 12 set @Year1 = @Year1 - 1 END set @Month2 = @Month1 - 1 set @Year2 = @Year1 If @Month2 = 0 BEGIN set @Month2 = 12 set @Year2 = @Year2 - 1 END set @Month3 = @Month2 - 1 set @Year3 = @Year2 If @Month3 = 0 BEGIN set @Month3 = 12 set @Year3 = @Year3 - 1 END set @Month4 = @Month3 - 1 set @Year4 = @Year3 If @Month4 = 0 BEGIN set @Month4 = 12 set @Year4 = @Year4 - 1 END SELECT MTCN, Account, SendPayIndicator, PayDateLOCDay, PayDateLOCMonth, .. WHERE T.SendPayIndicator = 'P' AND ((T.PayDateLocMonth = @Month1 AND T.PayDateLOCYear = @Year1) OR (T.PayDateLocMonth = @Month2 AND T.PayDateLOCYear = @Year2) OR (T.PayDateLocMonth = @Month3 AND T.PayDateLOCYear = @Year3) OR (T.PayDateLocMonth = @Month4 AND T.PayDateLOCYear = @Year4)) END
J'ai testé ce code sur une table SQL SERVER , pas avec les mêmes variables mais cela fais (je pense) ce que tu veux. Cela suppose aussi que ton paramètre @Month est du type smallint
A plus
soleil_levant
Messages postés
393
Date d'inscription
lundi 15 septembre 2008
Statut
Membre
Dernière intervention
14 avril 2011
32
19 août 2009 à 17:28
19 août 2009 à 17:28
Salut Christounet,
MErci à toi Christounet mon sauveur :)
En faite j'ai trouvé une solution depuis, elle ressemble à la tienne .. lol pas trop, la tienne beaucoup mieux.
Voici la mienne:
DECLARE @mois int, @type_declaration char(50)
SET @mois = 8 /* La j'affecte le mois manuellement, c'est le but en faite*/
SET @type_declaration = 'REC' /* le type de déclaration aussi */
IF @mois NOT IN(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
PRINT 'Saisir une Date comprise entre 1 et 12'
ELSE IF @mois = 1
BEGIN
SELECT MTCN, SendPayIndicator
FROM qryTransactionDetails T
WHERE T.SendPayIndicator = 'P'
AND T.PayDateLOCYear = YEAR(GETDATE()) - 1
AND T.PayDateLOCMonth BETWEEN 9 AND 12
AND T.Adjustment_ID = '-1'
END
--ELSE
--PRINT 'Ca ne serre à rien'
ELSE IF @mois = 2
BEGIN
SELECT MTCN, SendPayIndicator
FROM qryTransactionDetails T
WHERE T.SendPayIndicator = 'P'
AND ((T.PayDateLOCYear = YEAR(GETDATE()) - 1
AND T.PayDateLOCMonth BETWEEN 10 AND 12 )
OR
(T.PayDateLOCYear = YEAR(GETDATE())
AND T.PayDateLOCMonth = 1))
AND T.Adjustment_ID = '-1'
END
ELSE IF @mois = 3
BEGIN
SELECT MTCN, SendPayIndicator
FROM qryTransactionDetails T
WHERE T.SendPayIndicator = 'P'
AND ((T.PayDateLOCYear = YEAR(GETDATE()) - 1
AND T.PayDateLOCMonth BETWEEN 11 AND 12)
OR
(T.PayDateLOCYear = YEAR(GETDATE())
AND T.PayDateLOCMonth BETWEEN 1 AND 2))
AND T.Adjustment_ID = '-1'
END
ELSE IF @mois = 4
BEGIN
SELECT MTCN, SendPayIndicator
FROM qryTransactionDetails T
WHERE T.SendPayIndicator = 'P'
AND ((T.PayDateLOCYear = YEAR(GETDATE()) - 1
AND T.PayDateLOCMonth = 12)
OR (T.PayDateLOCYear = YEAR(GETDATE())
AND T.PayDateLOCMonth BETWEEN 1 AND 3))
AND T.Adjustment_ID = '-1'
END
..manque le meme type pr le reste des mois.
GO
MErci Christounet,
MILLE MERCI!!
Je vais la tester demain, mais la syntaxe, l'ergonomie du code est bien meilleure!!
A+
MErci à toi Christounet mon sauveur :)
En faite j'ai trouvé une solution depuis, elle ressemble à la tienne .. lol pas trop, la tienne beaucoup mieux.
Voici la mienne:
DECLARE @mois int, @type_declaration char(50)
SET @mois = 8 /* La j'affecte le mois manuellement, c'est le but en faite*/
SET @type_declaration = 'REC' /* le type de déclaration aussi */
IF @mois NOT IN(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
PRINT 'Saisir une Date comprise entre 1 et 12'
ELSE IF @mois = 1
BEGIN
SELECT MTCN, SendPayIndicator
FROM qryTransactionDetails T
WHERE T.SendPayIndicator = 'P'
AND T.PayDateLOCYear = YEAR(GETDATE()) - 1
AND T.PayDateLOCMonth BETWEEN 9 AND 12
AND T.Adjustment_ID = '-1'
END
--ELSE
--PRINT 'Ca ne serre à rien'
ELSE IF @mois = 2
BEGIN
SELECT MTCN, SendPayIndicator
FROM qryTransactionDetails T
WHERE T.SendPayIndicator = 'P'
AND ((T.PayDateLOCYear = YEAR(GETDATE()) - 1
AND T.PayDateLOCMonth BETWEEN 10 AND 12 )
OR
(T.PayDateLOCYear = YEAR(GETDATE())
AND T.PayDateLOCMonth = 1))
AND T.Adjustment_ID = '-1'
END
ELSE IF @mois = 3
BEGIN
SELECT MTCN, SendPayIndicator
FROM qryTransactionDetails T
WHERE T.SendPayIndicator = 'P'
AND ((T.PayDateLOCYear = YEAR(GETDATE()) - 1
AND T.PayDateLOCMonth BETWEEN 11 AND 12)
OR
(T.PayDateLOCYear = YEAR(GETDATE())
AND T.PayDateLOCMonth BETWEEN 1 AND 2))
AND T.Adjustment_ID = '-1'
END
ELSE IF @mois = 4
BEGIN
SELECT MTCN, SendPayIndicator
FROM qryTransactionDetails T
WHERE T.SendPayIndicator = 'P'
AND ((T.PayDateLOCYear = YEAR(GETDATE()) - 1
AND T.PayDateLOCMonth = 12)
OR (T.PayDateLOCYear = YEAR(GETDATE())
AND T.PayDateLOCMonth BETWEEN 1 AND 3))
AND T.Adjustment_ID = '-1'
END
..manque le meme type pr le reste des mois.
GO
MErci Christounet,
MILLE MERCI!!
Je vais la tester demain, mais la syntaxe, l'ergonomie du code est bien meilleure!!
A+
19 août 2009 à 14:23
ça serre à quoi de me poser des questions sur mon problème et vous enfuir après et plus me répondre :( c'est pas trop cool
a+