IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes et SQL. Discussion :

Requête Analyse croisée entre 2 années par trimestre [AC-2016]


Sujet :

Requêtes et SQL.

  1. #1
    Membre régulier Avatar de DidoFido
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2009
    Messages : 157
    Points : 73
    Points
    73
    Par défaut Requête Analyse croisée entre 2 années par trimestre
    Bonjour,

    j'essaie de faire une requête comparatif entre deux années (Colonnes), par trimestre (Ligne), et quand j'essaie d'ouvrir la requête le message suivant apparait " Fonction "Quarter" non définie dans l'expression"

    Voici mon code :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    PARAMETERS [Date début an1] DateTime, [Date fin an1] DateTime, [Date début an2] DateTime, [Date fin an2] DateTime;
    TRANSFORM Sum(T_SRemise.Montants) AS Ventes
    SELECT T_Concession.[Nom Concession], T_SRemise.IDProduits, T_SRemise.IDSProduits, Quarter([RemiseDate]) AS Trimestre, Sum([Ventes]) AS AAD
    FROM T_Concession INNER JOIN (T_Remise INNER JOIN T_SRemise ON T_Remise.IDRemise = T_SRemise.IDRemise) ON T_Concession.IDConcession = T_Remise.IDConcession
    WHERE (((T_Remise.RemiseDate) Between [Date début an1] And [Date fin an1] Or (T_Remise.RemiseDate) Between [Date début an2] And [Date fin an2]))
    GROUP BY T_Concession.[Nom Concession], T_SRemise.IDProduits, T_SRemise.IDSProduits, Quarter([RemiseDate])
    ORDER BY Format([RemiseDate],"yyyy") DESC 
    PIVOT Format([RemiseDate],"yyyy");

    je réussi très bien à faire la même requête avec une requête comparatif trimestre (Colonnes), par Année (Ligne), j'aimerais avoir le contraire.
    Voici mon code:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    PARAMETERS [Date début an1] DateTime, [Date fin an1] DateTime, [Date début an2] DateTime, [Date fin an2] DateTime;
    TRANSFORM Sum(T_SRemise.Montants) AS Ventes
    SELECT T_Concession.[Nom Concession], T_SRemise.IDProduits, T_SRemise.IDSProduits, Year([RemiseDate]) AS Année, Sum([Ventes]) AS AAD
    FROM T_Concession INNER JOIN (T_Remise INNER JOIN T_SRemise ON T_Remise.IDRemise = T_SRemise.IDRemise) ON T_Concession.IDConcession = T_Remise.IDConcession
    WHERE (((T_Remise.RemiseDate) Between [Date début an1] And [Date fin an1] Or (T_Remise.RemiseDate) Between [Date début an2] And [Date fin an2]))
    GROUP BY T_Concession.[Nom Concession], T_SRemise.IDProduits, T_SRemise.IDSProduits, Year([RemiseDate])
    ORDER BY Format([RemiseDate],"q") DESC 
    PIVOT Format([RemiseDate],"q") In ("1","2","3","4");

    et celui là fonctionne très bien. qu'est-ce qui cloche ??

    merci de votre aide!

  2. #2
    Expert éminent Avatar de hyperion13
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 274
    Points : 6 583
    Points
    6 583
    Par défaut
    Salut
    Peut-on avoir la function Quarter ?

  3. #3
    Membre régulier Avatar de DidoFido
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2009
    Messages : 157
    Points : 73
    Points
    73
    Par défaut
    Citation Envoyé par hyperion13 Voir le message
    Salut
    Peut-on avoir la function Quarter ?
    Bonjour hyperion13, je comprend pas ?

  4. #4
    Expert éminent Avatar de hyperion13
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 274
    Points : 6 583
    Points
    6 583
    Par défaut
    Dans le 1er code en L3/L6, tu as : Quarter([RemiseDate]) AS Trimestre.
    Sauf à avoir la fonction Trimestre (ou Quarter) native sur Ac365, dans le cas contraire, il faudrait la rédiger dans un module standard.
    Le msg d'erreur indique qu'elle n'est pas native ou qu'elle n'existe pas (non définie).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Function Quarter(TheDate As Date) As Variant
    Quarter = Choose(DatePart("q", TheDate), 3, 4, 1, 2)
    End Function

  5. #5
    Membre régulier Avatar de DidoFido
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2009
    Messages : 157
    Points : 73
    Points
    73
    Par défaut
    Citation Envoyé par hyperion13 Voir le message
    Dans le 1er code en L3/L6, tu as : Quarter([RemiseDate]) AS Trimestre.
    Sauf à avoir la fonction Trimestre (ou Quarter) native sur Ac365, dans le cas contraire, il faudrait la rédiger dans un module standard.
    Le msg d'erreur indique qu'elle n'est pas native ou qu'elle n'existe pas (non définie).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Function Quarter(TheDate As Date) As Variant
    Quarter = Choose(DatePart("q", TheDate), 3, 4, 1, 2)
    End Function
    Bonjour hyperion13,

    1- J'ai créer dans VB le Module avec le code que tu m'as donné.
    2- j'imagine de que le module je L'ajoute dans ma requête à l'aide de Génarateur d'expression?
    2.1- Si oui, qu'est ce j'inscrit?

    merci!

  6. #6
    Expert éminent Avatar de hyperion13
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 274
    Points : 6 583
    Points
    6 583
    Par défaut
    Ta 1ère req devrait maintenant fonctionner puisque la fonction Quarter est déclarée.
    Images attachées Images attachées   

  7. #7
    Membre régulier Avatar de DidoFido
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2009
    Messages : 157
    Points : 73
    Points
    73
    Par défaut
    Citation Envoyé par hyperion13 Voir le message
    Ta 1ère req devrait maintenant fonctionner puisque la fonction Quarter est déclarée.
    Resalut, quand je lance la requête, il me demande les 4 dates, puis me demande Entrer une valeur de paramètre "TheDate"

    et m'affiche Cette expression présente une syntaxe incorrecte ou est trop complexe pour être évaluée………….

    Voici mon code SQL:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    PARAMETERS [Date début an1] DateTime, [Date fin an1] DateTime, [Date début an2] DateTime, [Date fin an2] DateTime;
    TRANSFORM Sum(T_SRemise.Montants) AS Ventes
    SELECT T_Concession.[Nom Concession], T_SRemise.IDProduits, T_SRemise.IDSProduits, Quarter([«TheDate»]) AS Expr1, Sum([Ventes]) AS AAD
    FROM T_Concession INNER JOIN (T_Remise INNER JOIN T_SRemise ON T_Remise.IDRemise = T_SRemise.IDRemise) ON T_Concession.IDConcession = T_Remise.IDConcession
    WHERE (((T_Remise.RemiseDate) Between [Date début an1] And [Date fin an1] Or (T_Remise.RemiseDate) Between [Date début an2] And [Date fin an2]))
    GROUP BY T_Concession.[Nom Concession], T_SRemise.IDProduits, T_SRemise.IDSProduits, Quarter([«TheDate»])
    ORDER BY Format([RemiseDate],"yyyy") DESC 
    PIVOT Format([RemiseDate],"yyyy")

    et mon Module2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Function Quarter(TheDate As Date) As Variant
    Quarter = Choose(DatePart("q", TheDate), 3, 4, 1, 2)
    End Function

  8. #8
    Membre régulier Avatar de DidoFido
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2009
    Messages : 157
    Points : 73
    Points
    73
    Par défaut
    Bonjour Hyperion13,

    j'ai modifier l'expression, j'avais oublier de changer le nom de champ pour les dates.

    je vais faire des test et je vais te revenir en cas de problème….

  9. #9
    Expert éminent Avatar de hyperion13
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 274
    Points : 6 583
    Points
    6 583
    Par défaut
    Re,
    Attention, une erreur en L2, corrigée ici !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Function Quarter(TheDate As Date) As Variant
    Quarter = Choose(DatePart("q", TheDate), 1, 2, 3, 4)
    End Function
    Sinon tu peux écrire ça
    Trimestre : Round(((Mois([RemiseDate])-1)/3)+0,51)

  10. #10
    Membre régulier Avatar de DidoFido
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2009
    Messages : 157
    Points : 73
    Points
    73
    Par défaut
    Oui, j'avais cru remarqué, je l'avais modifier….. je vais faire des test et te reviens…

    hyperion13, un gros merci!
    tout marche bien!

    si jamais je voudrais faire la même chose, mais par mois, est-ce que je dois changer par MONTH ?

  11. #11
    Expert éminent Avatar de hyperion13
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 274
    Points : 6 583
    Points
    6 583
    Par défaut
    Month() (ou Mois()) est une fonction native.
    en L2 de la 1ère syntaxe SQL il suffira de remplacer Quarter par Mois([RemiseDate]) As Mois.
    en L6 Quarter par Mois([RemiseDate])

  12. #12
    Membre régulier Avatar de DidoFido
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2009
    Messages : 157
    Points : 73
    Points
    73
    Par défaut
    Citation Envoyé par hyperion13 Voir le message
    Month() (ou Mois()) est une fonction native.
    en L2 de la 1ère syntaxe SQL il suffira de remplacer Quarter par Mois([RemiseDate]) As Mois.
    en L6 Quarter par Mois([RemiseDate])
    hyperion13

    Merci pour ton support

    bonne journée!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2016] Valeur par défaut dans une requête Analyse croisée
    Par DidoFido dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 04/01/2016, 13h52
  2. [AC-2010] Tri par année et par semaine dans requête analyse croisée
    Par macgyver44 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 17/09/2015, 10h44
  3. gestion trimestre dans états issus requête analyse croisée
    Par slave1802 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 08/07/2015, 22h21
  4. [AC-2007] Sélectionner les résultats d'une requête analyse croisée par mois
    Par cslbcg dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 03/12/2009, 17h21
  5. Ordre de tri par mois et années dans une requête analyse croisée
    Par garsflo dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 21/11/2007, 22h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo