Requete SQL Server
Résolu/Fermé
soleil_levant
Messages postés
393
Date d'inscription
lundi 15 septembre 2008
Statut
Membre
Dernière intervention
14 avril 2011
-
16 sept. 2009 à 11:12
soleil_levant Messages postés 393 Date d'inscription lundi 15 septembre 2008 Statut Membre Dernière intervention 14 avril 2011 - 22 sept. 2009 à 10:34
soleil_levant Messages postés 393 Date d'inscription lundi 15 septembre 2008 Statut Membre Dernière intervention 14 avril 2011 - 22 sept. 2009 à 10:34
A voir également:
- Requete SQL Server
- Ps3 media server - Télécharger - Divers Réseau & Wi-Fi
- Filezilla server - Télécharger - Téléchargement & Transfert
- Mysql community server - Télécharger - Bases de données
- Serviio media server - Télécharger - TV & Vidéo
- Sql server recovery - Télécharger - Gestion de données
7 réponses
incaout
Messages postés
347
Date d'inscription
lundi 8 septembre 2008
Statut
Membre
Dernière intervention
15 novembre 2012
74
16 sept. 2009 à 16:54
16 sept. 2009 à 16:54
Salut.
Je ne suis pas familier du SQL Server. Il y a un truc que je ne comprend pas dans ta requete. Pourquoi tu n'utilises pas l'id dans la condition where plutot que le nom, le prenom et la date de naissance ? J'ai aussi l'impression qu'il manque une clause FROM dans la requete de la condition
Un truc du genre :
SELECT ID, LTRIM(RTRIM(NOM)), LTRIM(RTRIM(PRENOM)), DATENAISSANCE, MONTANT, NOM_ENVOI, PRENOM_ENVOI
FROM qryTransactions
WHERE ID IN (
SELECT ID, SUM(MONTANT) FROM "latablemanquante" GROUP BY ID HAVING SUM(MONTANT) >= 1000)
Qu' y a t'il dans qryTransactions ?
Pour ce qui est de ta question, je ferais une requete qui compte le nombre des différents d'envoyeurs pour un client et ensuite j'appliquerai une condition pour que seuls les enregistrements qui ont un résultat >=3 soient affichés.
Si la requete est trop complexe à créer alors, tu as en effet raison d'utiliser le transac sql qui d'après ce que j'ai lu permet d'écrire des procédures stockées. Voici un lien qui peut t'aider :
https://sqlpro.developpez.com/cours/sqlserver/transactsql/
Bon courage
Cdlt
IC
Je ne suis pas familier du SQL Server. Il y a un truc que je ne comprend pas dans ta requete. Pourquoi tu n'utilises pas l'id dans la condition where plutot que le nom, le prenom et la date de naissance ? J'ai aussi l'impression qu'il manque une clause FROM dans la requete de la condition
Un truc du genre :
SELECT ID, LTRIM(RTRIM(NOM)), LTRIM(RTRIM(PRENOM)), DATENAISSANCE, MONTANT, NOM_ENVOI, PRENOM_ENVOI
FROM qryTransactions
WHERE ID IN (
SELECT ID, SUM(MONTANT) FROM "latablemanquante" GROUP BY ID HAVING SUM(MONTANT) >= 1000)
Qu' y a t'il dans qryTransactions ?
Pour ce qui est de ta question, je ferais une requete qui compte le nombre des différents d'envoyeurs pour un client et ensuite j'appliquerai une condition pour que seuls les enregistrements qui ont un résultat >=3 soient affichés.
Si la requete est trop complexe à créer alors, tu as en effet raison d'utiliser le transac sql qui d'après ce que j'ai lu permet d'écrire des procédures stockées. Voici un lien qui peut t'aider :
https://sqlpro.developpez.com/cours/sqlserver/transactsql/
Bon courage
Cdlt
IC
soleil_levant
Messages postés
393
Date d'inscription
lundi 15 septembre 2008
Statut
Membre
Dernière intervention
14 avril 2011
32
17 sept. 2009 à 09:36
17 sept. 2009 à 09:36
Bonjour,
Merci pour ta réponse.
En ce qui concerne ma requête, le ID est composé de deux colonnes (num et année). Je veux pas bosser sur les ID, c'est clair c'est un peu plus long l'exe de mes requetes, mais c'est le fonctionnement final qui l'exige.
Le qryTransactions c'est une vue de Table. Mon entreprise de stage me donne accès qu'à cette vue la. La polémique était de travailler sur les tables mais ils refusent catégoriquement.
enfin, ma requete est bonne, faut juste enlever le premier sum dans la sou-requete select.
Elle sert à sélectionner les clients qui ont recu plus de 1000 durant une période, la concat avec + et trim sert à régler kk problèmes de espaces et saisie incorrectes des noms dans la base c'est pour ça.
Ma question est d'éviter les transac SQL ou curseurs. Moi perso suis habitué avec ORacle (formation école). Mais sql Server est un peut pareil à pars kk packages..
Pour ta réponse :
Pour ce qui est de ta question, je ferais une requete qui compte le nombre des différents d'envoyeurs pour un client et ensuite j'appliquerai une condition pour que seuls les enregistrements qui ont un résultat >=3 soient affichés.
As tu un moyen ? peut s'il te plait me montrer un bout de code?
Merci d'avance
Merci pour ta réponse.
En ce qui concerne ma requête, le ID est composé de deux colonnes (num et année). Je veux pas bosser sur les ID, c'est clair c'est un peu plus long l'exe de mes requetes, mais c'est le fonctionnement final qui l'exige.
Le qryTransactions c'est une vue de Table. Mon entreprise de stage me donne accès qu'à cette vue la. La polémique était de travailler sur les tables mais ils refusent catégoriquement.
enfin, ma requete est bonne, faut juste enlever le premier sum dans la sou-requete select.
Elle sert à sélectionner les clients qui ont recu plus de 1000 durant une période, la concat avec + et trim sert à régler kk problèmes de espaces et saisie incorrectes des noms dans la base c'est pour ça.
Ma question est d'éviter les transac SQL ou curseurs. Moi perso suis habitué avec ORacle (formation école). Mais sql Server est un peut pareil à pars kk packages..
Pour ta réponse :
Pour ce qui est de ta question, je ferais une requete qui compte le nombre des différents d'envoyeurs pour un client et ensuite j'appliquerai une condition pour que seuls les enregistrements qui ont un résultat >=3 soient affichés.
As tu un moyen ? peut s'il te plait me montrer un bout de code?
Merci d'avance
incaout
Messages postés
347
Date d'inscription
lundi 8 septembre 2008
Statut
Membre
Dernière intervention
15 novembre 2012
74
17 sept. 2009 à 13:19
17 sept. 2009 à 13:19
Salut.
Voici un exemple de requête qui s'apparente à ce que tu veux faire. Comme je n'ai pas tes tables sous la main et que je voulais tester, j'ai essayé dans un de mes projets.
Le contexte est le suivant.
Une personne possède un programme de formation et reçoit des cours. Un ou plusieurs formateurs peuvent intervenir. Une table Releve_Activite permet d'enregistrer les informations concernant chaque cours donné, notamment la reférence du programme, le numéro de l'intervenant. La requete ci-dessous permet de calculer pour chaque programme combien d'intervenants différents il y a eu :
SELECT Releve_Activite.RefProg, COUNT(2) FROM (
SELECT Releve_Activite.RefProg, Count(Releve_Activite.RefEns) AS CompteDeRefEns, Releve_Activite.RefEns
FROM Releve_Activite
GROUP BY Releve_Activite.RefProg, Releve_Activite.RefEns
HAVING (((Releve_Activite.RefProg)>0))
ORDER BY Releve_Activite.RefProg)
GROUP BY Releve_Activite.RefProg
Et si maintenant tu souhaites extraire les programmes dont le nb d'intervenants différents est >= 3 :
SELECT Releve_Activite.RefProg AS Expr1, Count(2) AS Expr2
FROM (SELECT Releve_Activite.RefProg, Count(Releve_Activite.RefEns) AS CompteDeRefEns, Releve_Activite.RefEns
FROM Releve_Activite
GROUP BY Releve_Activite.RefProg, Releve_Activite.RefEns
HAVING (((Releve_Activite.RefProg)>0))
ORDER BY Releve_Activite.RefProg)
GROUP BY Releve_Activite.RefProg
HAVING (((Count(2))>=3));
A adapter à ton cas en sachant que j'ai testé sous Access 2000, qui prend certains arrangement avec le SQL.
Cdlt
IC
Voici un exemple de requête qui s'apparente à ce que tu veux faire. Comme je n'ai pas tes tables sous la main et que je voulais tester, j'ai essayé dans un de mes projets.
Le contexte est le suivant.
Une personne possède un programme de formation et reçoit des cours. Un ou plusieurs formateurs peuvent intervenir. Une table Releve_Activite permet d'enregistrer les informations concernant chaque cours donné, notamment la reférence du programme, le numéro de l'intervenant. La requete ci-dessous permet de calculer pour chaque programme combien d'intervenants différents il y a eu :
SELECT Releve_Activite.RefProg, COUNT(2) FROM (
SELECT Releve_Activite.RefProg, Count(Releve_Activite.RefEns) AS CompteDeRefEns, Releve_Activite.RefEns
FROM Releve_Activite
GROUP BY Releve_Activite.RefProg, Releve_Activite.RefEns
HAVING (((Releve_Activite.RefProg)>0))
ORDER BY Releve_Activite.RefProg)
GROUP BY Releve_Activite.RefProg
Et si maintenant tu souhaites extraire les programmes dont le nb d'intervenants différents est >= 3 :
SELECT Releve_Activite.RefProg AS Expr1, Count(2) AS Expr2
FROM (SELECT Releve_Activite.RefProg, Count(Releve_Activite.RefEns) AS CompteDeRefEns, Releve_Activite.RefEns
FROM Releve_Activite
GROUP BY Releve_Activite.RefProg, Releve_Activite.RefEns
HAVING (((Releve_Activite.RefProg)>0))
ORDER BY Releve_Activite.RefProg)
GROUP BY Releve_Activite.RefProg
HAVING (((Count(2))>=3));
A adapter à ton cas en sachant que j'ai testé sous Access 2000, qui prend certains arrangement avec le SQL.
Cdlt
IC
soleil_levant
Messages postés
393
Date d'inscription
lundi 15 septembre 2008
Statut
Membre
Dernière intervention
14 avril 2011
32
17 sept. 2009 à 14:08
17 sept. 2009 à 14:08
Salut,
merci infiniment incaout :)
je vais tester ça tout à l'heure et te tiendrais au courant, je la teste ti suite :) tiens :)
Te tiens et courant et merci encore.
merci infiniment incaout :)
je vais tester ça tout à l'heure et te tiendrais au courant, je la teste ti suite :) tiens :)
Te tiens et courant et merci encore.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
soleil_levant
Messages postés
393
Date d'inscription
lundi 15 septembre 2008
Statut
Membre
Dernière intervention
14 avril 2011
32
21 sept. 2009 à 15:16
21 sept. 2009 à 15:16
Bonjour INCAOUT!!
Je tiens à te remercier pour ton intéret d'abord. Ensuite je reviens vers toi pour te donner des nouvelles concernant ma requête.
Ton aide est d'une très grande utilité!! Merci infiniment!! Franchement j'ai adopté ta requête à ma base SQL Server. Vu mon besoin et les erreurs de saisie dans la base, voici le sous requête essentielle qui répond à mon besoin, cad sélectionner les clients qui ont plusieurs Clients qui envoient. Durant une période donnée. Ensuite il manque mais pas important la requête mère si je puisse dire qui est peu longue.
Voici sous SQl Server la requête:
Use test_base
SELECT LTRIM(RTRIM(T2.P_REC_LASTNAME))+LTRIM(RTRIM(T2.P_REC_FIRSTNAME))+LTRIM(RTRIM(T2.P_REC_BIRTHDATE)) As Client, COUNT(LTRIM(RTRIM(T2.P_SEN_LASTNAME))+LTRIM(RTRIM(T2.P_SEN_FIRSTNAME))) AS NbreCorrespondant
FROM qryTransactionDetails T2
WHERE T2.Adjustment_ID = '-1'
AND T2.PayDateLOCYear = 2009
AND T2.PayDateLOCMonth BETWEEN 1 AND 4
GROUP BY LTRIM(RTRIM(T2.P_REC_LASTNAME))+LTRIM(RTRIM(T2.P_REC_FIRSTNAME))+LTRIM(RTRIM(T2.P_REC_BIRTHDATE))
ORDER BY LTRIM(RTRIM(T2.P_REC_LASTNAME))+LTRIM(RTRIM(T2.P_REC_FIRSTNAME))+LTRIM(RTRIM(T2.P_REC_BIRTHDATE))
Ne me demande pas trop les colonnes et le reste car c'est confidentiel lol
Merci beaucoup et à +
Sujet résolut.
Je tiens à te remercier pour ton intéret d'abord. Ensuite je reviens vers toi pour te donner des nouvelles concernant ma requête.
Ton aide est d'une très grande utilité!! Merci infiniment!! Franchement j'ai adopté ta requête à ma base SQL Server. Vu mon besoin et les erreurs de saisie dans la base, voici le sous requête essentielle qui répond à mon besoin, cad sélectionner les clients qui ont plusieurs Clients qui envoient. Durant une période donnée. Ensuite il manque mais pas important la requête mère si je puisse dire qui est peu longue.
Voici sous SQl Server la requête:
Use test_base
SELECT LTRIM(RTRIM(T2.P_REC_LASTNAME))+LTRIM(RTRIM(T2.P_REC_FIRSTNAME))+LTRIM(RTRIM(T2.P_REC_BIRTHDATE)) As Client, COUNT(LTRIM(RTRIM(T2.P_SEN_LASTNAME))+LTRIM(RTRIM(T2.P_SEN_FIRSTNAME))) AS NbreCorrespondant
FROM qryTransactionDetails T2
WHERE T2.Adjustment_ID = '-1'
AND T2.PayDateLOCYear = 2009
AND T2.PayDateLOCMonth BETWEEN 1 AND 4
GROUP BY LTRIM(RTRIM(T2.P_REC_LASTNAME))+LTRIM(RTRIM(T2.P_REC_FIRSTNAME))+LTRIM(RTRIM(T2.P_REC_BIRTHDATE))
ORDER BY LTRIM(RTRIM(T2.P_REC_LASTNAME))+LTRIM(RTRIM(T2.P_REC_FIRSTNAME))+LTRIM(RTRIM(T2.P_REC_BIRTHDATE))
Ne me demande pas trop les colonnes et le reste car c'est confidentiel lol
Merci beaucoup et à +
Sujet résolut.
incaout
Messages postés
347
Date d'inscription
lundi 8 septembre 2008
Statut
Membre
Dernière intervention
15 novembre 2012
74
21 sept. 2009 à 17:03
21 sept. 2009 à 17:03
Salut.
Très heureux d'apprendre que cela fonctionne pour toi. Bonne continuation pour la suite alors.
Cdlt
IC
Très heureux d'apprendre que cela fonctionne pour toi. Bonne continuation pour la suite alors.
Cdlt
IC
soleil_levant
Messages postés
393
Date d'inscription
lundi 15 septembre 2008
Statut
Membre
Dernière intervention
14 avril 2011
32
22 sept. 2009 à 10:34
22 sept. 2009 à 10:34
Thanks a lot :)