|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : juin 2011 Messages : 4 ![]() |
Bonjour à tous,
Je suis novice dans ce forum et je voudrais une solution pour mon problème suivant: Je suis entrain de créer une requête (sous SQL 2008) qui me permet d'avoir mon chiffre d'affaire (CA) par Année/Mois et par article Pour faire cette requête j'ai fait une jointure (gauche) entre ma table article et ma table Facture: Code :
Année Mois Code article Designation Article CA 2011 04 99999 Article Test 1000 2011 04 99999 Article Test 2000 Le problème est que lorsque l'article n'a pas de CA par mois, la requête n'affiche rien alors je souhaite avoir ce résultat Année Mois Code article Designation Article CA 2011 03 99999 Article Test 0 2011 04 99999 Article Test 1000 2011 04 99999 Article Test 2000 Merci à l'avance pour votre collaboration |
||
|
|
00
|
|
|
#2 | |
|
Nouveau Membre du Club
![]() Inscription : décembre 2008 Messages : 63 ![]() |
Citation:
Si vous remplacez par : Ca pourrait fonctionner. |
|
|
|
00
|
|
|
#3 |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Bonjour
Et pour le GROUP BY... c'était trop cher ou ils étaient en rupture de stock ? Donnez nous votre requête complète ! Avec une jointure externe telle que vous l'avez faite(mais avec le group by |
|
|
10
|
|
|
#4 | ||
|
Invité de passage
![]() Inscription : juin 2011 Messages : 4 ![]() |
Bonsoir à tous,
Merci pour votre réponse mais je pense que je suis obligé de vous transmettre ma requête complète Code :
|
||
|
|
00
|
|
|
#5 |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Je ne comprend pas trop votre besoin
Dans votre exemple d'origine, je ne comprend pas pourquoi les deux dernières lignes ne sont pas groupées, puisqu'il s'agit du même produit, le même mois, même année... Si votre problème est de faire ressortir tous les produits tous les mois (meme les ou il n'y a pas eu de vente pour tel ou tel produit), alors le mieux est de passer par des tables de calendrier, et faire un produit cartesien avec la table des produits, puis votre jointure externe avec la table des factures. sinon, en alternative, vous pouvez générer une pseudo-table des mois avec une CTE recursive. |
|
|
00
|
|
|
#6 |
|
Invité de passage
![]() Inscription : juin 2011 Messages : 4 ![]() |
Bonsoir,
Mon besoin est simple, je n'arrive pas à avoir le résultat souhaité à partir de ma requête qui me parait logique et correcte! (avoir toutes les CA des articles mensuellement même ceux avec des valeurs Null) @aieeeuuuuu: je ne vois pas pourquoi passer par une table intermédiaire alors que normalement la logique de la requete est correcte? Cordialement |
|
|
00
|
|
|
#7 | |
![]() ![]() |
Citation:
Là vous devez créer une ligne qui n'existe pas, et la solution que vous propose aieeeuuuuu prend alors tout son sens.
__________________
Email : http://scr.im/waldar |
|
|
00
|
|
|
#8 | ||
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 669 ![]() |
Bonjour,
J'aurai plutôt écrit : Code :
@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
||
|
10
|
|
|
#9 |
|
Invité de passage
![]() Inscription : juin 2011 Messages : 4 ![]() |
Bonjour à tous,
Je voudrais tous d'abord vous remerciez pour l’intérêt accordé à mon problème:-) @elsuket: j'ai essayé d'inverser la fonction ISNULL comme vous me l'avez proposé et je n'ai rien obtenu @Waldar & aieeeuuuuu: Merci de bien vouloir éclaircir un peu votre idée et me proposer un exemple de code pour mieux comprendre. Toutes autres idées ou proposition(plus simple Cordialement |
|
|
00
|
|
|
#10 | ||
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Ok !
Vous faites une jointure externe entre la table produit et la table commande. Grâce à cette jointure externe, un produit qui n'a jamais été vendu apparaitra quand même dans le résultat. Vous aurez donc toutes les colonnes issues de la table produit renseignées, et toutes les colonnes issues de la table facturation à NULL. mais vous aurez une ligne par produit, et vous voulez une ligne par produit et par mois. Il faut donc ajouter les mois dans votre condition de jointure. Il vous faut donc bien cette "liste des mois". Je vois donc trois solutions : 1/Un modèle de calendrier (comme celui de SQLPro par exemple) 2/ générer cette liste à la volée avec une CTE récursive 3/ récupérer cette liste depuis la table des factures La troisième solution, tentante présente cependant quelques défauts : 1/ si pour un mois donné, il n'y a eu aucune commande d'aucun produit, ce mois n'apparaitra pas. 2/ vous allez traiter une énorme quantité de données inutilement. La solution avec table de calendrier et sans doute la meilleure, surtout si vous étés amené a effectuer régulièrement ce genre de requêtes : c'est sans doute celle qui offrira les meilleures performances, les données étant déjà dans la base, avec les indexes (et statistiques) nécessaires pour l'optimisation. Cette solution est cependant plus lourde à mettre en place. Si vous n'avez as la possibilité d'implémenter cette solution, il vous reste donc la deuxième solution, en générant vous même à la volée la précieuse liste des mois. Ci dessous, un exemple, que je vous laisse adapter à votre besoin (vous ne nous avez pas donné la structure de vos tables...) Code SQL :
n'hésitez pas si quelque chose n'est toujours pas clair |
||
|
|
00
|
|
|
#11 | |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 954 ![]() |
Citation:
A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
|
00
|
|
|
#12 |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
|
|
|
00
|
|
|
#13 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 954 ![]() |
Je m'y attendais, d'où le piège tendu !!!
![]() NON, car il peut implémenter son calendrier dans une autre base et faire des requêtes interbase.... C'est même la meilleure solution, car la base calendrier peut être mise en READ ONLY !!!! A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
00
|
|
|
#14 | |||
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Citation:
heu.. ce cas là alors : Citation:
![]() Citation:
|
|||
|
|
00
|
|
|
#15 | |
|
Membre actif
![]() Inscription : juin 2006 Messages : 161 ![]() |
Citation:
Je rebondis là-dessus pour demander comment vous gérer les accès pour autoriser les requêtes interbases. Zabriskir |
|
|
|
00
|
|
|
#16 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 954 ![]() |
par le chainage des propriétaires
sp_configure 'cross db ownership chaining' ou alter database DB_CHAINING { ON | OFF } A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
00
|
|
|
#17 | |
|
Membre actif
![]() Inscription : juin 2006 Messages : 161 ![]() |
Citation:
Quelle est la bonne pratique : - donner accès à la base cible/commune à tous les utilisateurs qui ont besoin d'accéder à la vue calendrier ? - se servir de l'utilisateur guest (comme pour tempdb ou master) ? Zabriskir |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com