Bonjour,
Je bloque sur une requête alors si vous avez 2mn à m'accorder ...
Soit une table contenant toutes les lignes de factures depuis 1999.
Je voudrais sortir un résultat sous la forme :
Client / CA (N-1) / CA (N)
Pour l'instant j'ai fait 2 vues que je mixe mais je voudrais faire ça
en une seule requête. Est-ce possible ? Je l'ai tourné dans tous les
sens mais pour l'instant je sèche. Même SQLzoo ne m'a pas aidé, ou
alors j'ai pas bien cherché.
"Stéphane Miqueu" a écrit dans le message de news:
Bonjour, Je bloque sur une requête alors si vous avez 2mn à m'accorder ...
Soit une table contenant toutes les lignes de factures depuis 1999. Je voudrais sortir un résultat sous la forme : Client / CA (N-1) / CA (N)
la jointure de 2 req est la solution sql apres pour aller plus loin y'a 2 solution: -par programmation, faire un select qui renvoi client,N,CA et "redresser" le résultat lig = findlig(result.client) col=findcol(result.N) tab[lig][col]=result.CA -voir les instruction sql de la sgbd cible par exemple,avec oracle y'a decode ta requete pourrait s'écrire select client,sum( decode(N,2006,CA,0)),sum(decode(N,2007,CA,0)) from table group by client
"Stéphane Miqueu" <stephane.miqueu@free.fr> a écrit dans le message de
news:mn.da267d7368973c26.63824@free.fr...
Bonjour,
Je bloque sur une requête alors si vous avez 2mn à m'accorder ...
Soit une table contenant toutes les lignes de factures depuis 1999.
Je voudrais sortir un résultat sous la forme :
Client / CA (N-1) / CA (N)
la jointure de 2 req est la solution sql
apres pour aller plus loin y'a 2 solution:
-par programmation, faire un select qui renvoi client,N,CA et "redresser" le
résultat
lig = findlig(result.client)
col=findcol(result.N)
tab[lig][col]=result.CA
-voir les instruction sql de la sgbd cible
par exemple,avec oracle y'a decode
ta requete pourrait s'écrire
select client,sum( decode(N,2006,CA,0)),sum(decode(N,2007,CA,0)) from table
group by client
"Stéphane Miqueu" a écrit dans le message de news:
Bonjour, Je bloque sur une requête alors si vous avez 2mn à m'accorder ...
Soit une table contenant toutes les lignes de factures depuis 1999. Je voudrais sortir un résultat sous la forme : Client / CA (N-1) / CA (N)
la jointure de 2 req est la solution sql apres pour aller plus loin y'a 2 solution: -par programmation, faire un select qui renvoi client,N,CA et "redresser" le résultat lig = findlig(result.client) col=findcol(result.N) tab[lig][col]=result.CA -voir les instruction sql de la sgbd cible par exemple,avec oracle y'a decode ta requete pourrait s'écrire select client,sum( decode(N,2006,CA,0)),sum(decode(N,2007,CA,0)) from table group by client
Stéphane Miqueu
Il se trouve que patrice a formulé :
la jointure de 2 req est la solution sql apres pour aller plus loin y'a 2 solution: -par programmation, faire un select qui renvoi client,N,CA et "redresser" le résultat lig = findlig(result.client) col=findcol(result.N) tab[lig][col]=result.CA -voir les instruction sql de la sgbd cible par exemple,avec oracle y'a decode ta requete pourrait s'écrire select client,sum( decode(N,2006,CA,0)),sum(decode(N,2007,CA,0)) from table group by client
Merci pour ta réponse. Mon SGBD est SQLServeur où le DECODE est inconnu. Je vais me rabattre vers la jointure de 2 requêtes à moins qu'un Kador en SQLServeur me sauve ...
-- Ami Calmant Stéphane
Il se trouve que patrice a formulé :
la jointure de 2 req est la solution sql
apres pour aller plus loin y'a 2 solution:
-par programmation, faire un select qui renvoi client,N,CA et "redresser" le
résultat
lig = findlig(result.client)
col=findcol(result.N)
tab[lig][col]=result.CA
-voir les instruction sql de la sgbd cible
par exemple,avec oracle y'a decode
ta requete pourrait s'écrire
select client,sum( decode(N,2006,CA,0)),sum(decode(N,2007,CA,0)) from table
group by client
Merci pour ta réponse. Mon SGBD est SQLServeur où le DECODE est
inconnu. Je vais me rabattre vers la jointure de 2 requêtes à moins
qu'un Kador en SQLServeur me sauve ...
la jointure de 2 req est la solution sql apres pour aller plus loin y'a 2 solution: -par programmation, faire un select qui renvoi client,N,CA et "redresser" le résultat lig = findlig(result.client) col=findcol(result.N) tab[lig][col]=result.CA -voir les instruction sql de la sgbd cible par exemple,avec oracle y'a decode ta requete pourrait s'écrire select client,sum( decode(N,2006,CA,0)),sum(decode(N,2007,CA,0)) from table group by client
Merci pour ta réponse. Mon SGBD est SQLServeur où le DECODE est inconnu. Je vais me rabattre vers la jointure de 2 requêtes à moins qu'un Kador en SQLServeur me sauve ...
-- Ami Calmant Stéphane
Roumegou Eric
Stéphane Miqueu avait énoncé :
Il se trouve que patrice a formulé :
la jointure de 2 req est la solution sql apres pour aller plus loin y'a 2 solution: -par programmation, faire un select qui renvoi client,N,CA et "redresser" le résultat lig = findlig(result.client) col=findcol(result.N) tab[lig][col]=result.CA -voir les instruction sql de la sgbd cible par exemple,avec oracle y'a decode ta requete pourrait s'écrire select client,sum( decode(N,2006,CA,0)),sum(decode(N,2007,CA,0)) from table group by client
Merci pour ta réponse. Mon SGBD est SQLServeur où le DECODE est inconnu. Je vais me rabattre vers la jointure de 2 requêtes à moins qu'un Kador en SQLServeur me sauve ...
en voila un qui ne connait pas http://sqlzoo.net/
pour les équivalences entre sql, c'est super. ton cas peut se gérer avec un case.
-- Eric Roumégou Webmaster des wtablettes http://cerbermail.com/?qE7t4Qvilo (cliquez sur le lien ci-dessus pour me contacter en privé)
Stéphane Miqueu avait énoncé :
Il se trouve que patrice a formulé :
la jointure de 2 req est la solution sql
apres pour aller plus loin y'a 2 solution:
-par programmation, faire un select qui renvoi client,N,CA et "redresser"
le
résultat
lig = findlig(result.client)
col=findcol(result.N)
tab[lig][col]=result.CA
-voir les instruction sql de la sgbd cible
par exemple,avec oracle y'a decode
ta requete pourrait s'écrire
select client,sum( decode(N,2006,CA,0)),sum(decode(N,2007,CA,0)) from table
group by client
Merci pour ta réponse. Mon SGBD est SQLServeur où le DECODE est inconnu. Je
vais me rabattre vers la jointure de 2 requêtes à moins qu'un Kador en
SQLServeur me sauve ...
en voila un qui ne connait pas http://sqlzoo.net/
pour les équivalences entre sql, c'est super.
ton cas peut se gérer avec un case.
--
Eric Roumégou
Webmaster des wtablettes
http://cerbermail.com/?qE7t4Qvilo
(cliquez sur le lien ci-dessus pour me contacter en privé)
la jointure de 2 req est la solution sql apres pour aller plus loin y'a 2 solution: -par programmation, faire un select qui renvoi client,N,CA et "redresser" le résultat lig = findlig(result.client) col=findcol(result.N) tab[lig][col]=result.CA -voir les instruction sql de la sgbd cible par exemple,avec oracle y'a decode ta requete pourrait s'écrire select client,sum( decode(N,2006,CA,0)),sum(decode(N,2007,CA,0)) from table group by client
Merci pour ta réponse. Mon SGBD est SQLServeur où le DECODE est inconnu. Je vais me rabattre vers la jointure de 2 requêtes à moins qu'un Kador en SQLServeur me sauve ...
en voila un qui ne connait pas http://sqlzoo.net/
pour les équivalences entre sql, c'est super. ton cas peut se gérer avec un case.
-- Eric Roumégou Webmaster des wtablettes http://cerbermail.com/?qE7t4Qvilo (cliquez sur le lien ci-dessus pour me contacter en privé)
Pierre BOUSQUET
j'ai fait cette requete vite fait sur mes fichiers, si ca peut t'aider
select f1.annee, f1.ca, f2.annee, f2.ca from (select Year(do_date) as annee, SUM(dl_montantht)as ca from f_docligne group by year(do_date)) f1 left join (select Year(do_date) as annee, SUM(dl_montantht)as ca from f_docligne group by year(do_date)) f2 on f2.anneeñ.annee-1
Il se trouve que Stéphane Miqueu a formulé :
Bonjour, Je bloque sur une requête alors si vous avez 2mn à m'accorder ...
Soit une table contenant toutes les lignes de factures depuis 1999. Je voudrais sortir un résultat sous la forme : Client / CA (N-1) / CA (N)
Pour l'instant j'ai fait 2 vues que je mixe mais je voudrais faire ça en une seule requête. Est-ce possible ? Je l'ai tourné dans tous les sens mais pour l'instant je sèche. Même SQLzoo ne m'a pas aidé, ou alors j'ai pas bien cherché.
-- Pierre BOUSQUET
" Ne me dites pas que ce problème est difficile. S'il n'était pas difficile, ce ne serait pas un problème. "
j'ai fait cette requete vite fait sur mes fichiers, si ca peut t'aider
select f1.annee, f1.ca, f2.annee, f2.ca
from (select Year(do_date) as annee, SUM(dl_montantht)as ca from
f_docligne group by year(do_date)) f1
left join (select Year(do_date) as annee, SUM(dl_montantht)as ca from
f_docligne group by year(do_date)) f2 on f2.anneeñ.annee-1
Il se trouve que Stéphane Miqueu a formulé :
Bonjour,
Je bloque sur une requête alors si vous avez 2mn à m'accorder ...
Soit une table contenant toutes les lignes de factures depuis 1999.
Je voudrais sortir un résultat sous la forme :
Client / CA (N-1) / CA (N)
Pour l'instant j'ai fait 2 vues que je mixe mais je voudrais faire ça en une
seule requête. Est-ce possible ? Je l'ai tourné dans tous les sens mais pour
l'instant je sèche. Même SQLzoo ne m'a pas aidé, ou alors j'ai pas bien
cherché.
--
Pierre BOUSQUET
" Ne me dites pas que ce problème est difficile.
S'il n'était pas difficile, ce ne serait pas un problème. "
j'ai fait cette requete vite fait sur mes fichiers, si ca peut t'aider
select f1.annee, f1.ca, f2.annee, f2.ca from (select Year(do_date) as annee, SUM(dl_montantht)as ca from f_docligne group by year(do_date)) f1 left join (select Year(do_date) as annee, SUM(dl_montantht)as ca from f_docligne group by year(do_date)) f2 on f2.anneeñ.annee-1
Il se trouve que Stéphane Miqueu a formulé :
Bonjour, Je bloque sur une requête alors si vous avez 2mn à m'accorder ...
Soit une table contenant toutes les lignes de factures depuis 1999. Je voudrais sortir un résultat sous la forme : Client / CA (N-1) / CA (N)
Pour l'instant j'ai fait 2 vues que je mixe mais je voudrais faire ça en une seule requête. Est-ce possible ? Je l'ai tourné dans tous les sens mais pour l'instant je sèche. Même SQLzoo ne m'a pas aidé, ou alors j'ai pas bien cherché.
-- Pierre BOUSQUET
" Ne me dites pas que ce problème est difficile. S'il n'était pas difficile, ce ne serait pas un problème. "
Jacques TREPP
Salut Stéphane j'ai une stat qui compare Jour N et jour N-1. j'utilise une table temporaire que je remplis avec une requète: mais le traitement part d'une table mémoire contenant les jours de la semaine et des dates N et N-1. Le but étant de récupérer les CA N et N-1.
// --------------------------------- création de la table temporaire g_cReq = "CREATE TABLE stat_compare ("... +"joursemaine varchar(10) default NULL, "... +"dateref date default NULL,"... +"caref decimal(10,2) NULL default '0.00', "... +"datecomp date default NULL, "... +"cacomp decimal(10,2) NULL default '0.00'"... +") ENGINE=InnoDB DEFAULT CHARSET=latin1"
SI PAS Execute_Requete() ALORS RETOUR
// --------------------------------- remplissage de la table i est un entier POUR i = 1 A TableOccurrence(Table1) g_cReq = "insert into stat_compare set dateref = "+Quote(date1[i])+", "... +"caref = (select round(sum(qte*pxvttc),2) from det_ticket "... +"inner join ticket on det_ticket.id_ticket = ticket.id_ticket "... +"where datfct = "+Quote(date1[i])+" and type_lg in ('ART','ANL','REM') "... +"group by datfct), "... +"datecomp = "+Quote(date2[i])+", "... +"cacomp = (select round(sum(qte*pxvttc),2) from det_ticket "... +"inner join ticket on det_ticket.id_ticket = ticket.id_ticket "... +"where datfct = "+Quote(date2[i])+" and type_lg in ('ART','ANL','REM') "... +"group by datfct)" Execute_Requete(g_cReq,Faux) FIN
ça devrait pouvoir s'adapter.
A+
-- Jacques TREPP Albygest 3, rue Jean Mermoz 81160 ST-JUERY (enlevez 'pasdespam' pour me joindre)
Salut Stéphane
j'ai une stat qui compare Jour N et jour N-1. j'utilise une table temporaire
que je remplis avec une requète:
mais le traitement part d'une table mémoire contenant les jours de la
semaine et des dates N et N-1. Le but étant de récupérer les CA N et N-1.
// --------------------------------- création de la table temporaire
g_cReq = "CREATE TABLE stat_compare ("...
+"joursemaine varchar(10) default NULL, "...
+"dateref date default NULL,"...
+"caref decimal(10,2) NULL default '0.00', "...
+"datecomp date default NULL, "...
+"cacomp decimal(10,2) NULL default '0.00'"...
+") ENGINE=InnoDB DEFAULT CHARSET=latin1"
SI PAS Execute_Requete() ALORS RETOUR
// --------------------------------- remplissage de la table
i est un entier
POUR i = 1 A TableOccurrence(Table1)
g_cReq = "insert into stat_compare set dateref = "+Quote(date1[i])+", "...
+"caref = (select round(sum(qte*pxvttc),2) from det_ticket "...
+"inner join ticket on det_ticket.id_ticket = ticket.id_ticket "...
+"where datfct = "+Quote(date1[i])+" and type_lg in ('ART','ANL','REM')
"...
+"group by datfct), "...
+"datecomp = "+Quote(date2[i])+", "...
+"cacomp = (select round(sum(qte*pxvttc),2) from det_ticket "...
+"inner join ticket on det_ticket.id_ticket = ticket.id_ticket "...
+"where datfct = "+Quote(date2[i])+" and type_lg in ('ART','ANL','REM')
"...
+"group by datfct)"
Execute_Requete(g_cReq,Faux)
FIN
ça devrait pouvoir s'adapter.
A+
--
Jacques TREPP
Albygest
3, rue Jean Mermoz
81160 ST-JUERY
(enlevez 'pasdespam' pour me joindre)
Salut Stéphane j'ai une stat qui compare Jour N et jour N-1. j'utilise une table temporaire que je remplis avec une requète: mais le traitement part d'une table mémoire contenant les jours de la semaine et des dates N et N-1. Le but étant de récupérer les CA N et N-1.
// --------------------------------- création de la table temporaire g_cReq = "CREATE TABLE stat_compare ("... +"joursemaine varchar(10) default NULL, "... +"dateref date default NULL,"... +"caref decimal(10,2) NULL default '0.00', "... +"datecomp date default NULL, "... +"cacomp decimal(10,2) NULL default '0.00'"... +") ENGINE=InnoDB DEFAULT CHARSET=latin1"
SI PAS Execute_Requete() ALORS RETOUR
// --------------------------------- remplissage de la table i est un entier POUR i = 1 A TableOccurrence(Table1) g_cReq = "insert into stat_compare set dateref = "+Quote(date1[i])+", "... +"caref = (select round(sum(qte*pxvttc),2) from det_ticket "... +"inner join ticket on det_ticket.id_ticket = ticket.id_ticket "... +"where datfct = "+Quote(date1[i])+" and type_lg in ('ART','ANL','REM') "... +"group by datfct), "... +"datecomp = "+Quote(date2[i])+", "... +"cacomp = (select round(sum(qte*pxvttc),2) from det_ticket "... +"inner join ticket on det_ticket.id_ticket = ticket.id_ticket "... +"where datfct = "+Quote(date2[i])+" and type_lg in ('ART','ANL','REM') "... +"group by datfct)" Execute_Requete(g_cReq,Faux) FIN
ça devrait pouvoir s'adapter.
A+
-- Jacques TREPP Albygest 3, rue Jean Mermoz 81160 ST-JUERY (enlevez 'pasdespam' pour me joindre)
Pierre BOUSQUET
quoi ! elle est pas bonne ma solution ?
lol
Jacques TREPP a émis l'idée suivante :
Salut Stéphane j'ai une stat qui compare Jour N et jour N-1. j'utilise une table temporaire que je remplis avec une requète: mais le traitement part d'une table mémoire contenant les jours de la semaine et des dates N et N-1. Le but étant de récupérer les CA N et N-1.
// --------------------------------- création de la table temporaire g_cReq = "CREATE TABLE stat_compare ("... +"joursemaine varchar(10) default NULL, "... +"dateref date default NULL,"... +"caref decimal(10,2) NULL default '0.00', "... +"datecomp date default NULL, "... +"cacomp decimal(10,2) NULL default '0.00'"... +") ENGINE=InnoDB DEFAULT CHARSET=latin1"
SI PAS Execute_Requete() ALORS RETOUR
// --------------------------------- remplissage de la table i est un entier POUR i = 1 A TableOccurrence(Table1) g_cReq = "insert into stat_compare set dateref = "+Quote(date1[i])+", "... +"caref = (select round(sum(qte*pxvttc),2) from det_ticket "... +"inner join ticket on det_ticket.id_ticket = ticket.id_ticket "... +"where datfct = "+Quote(date1[i])+" and type_lg in ('ART','ANL','REM') "... +"group by datfct), "... +"datecomp = "+Quote(date2[i])+", "... +"cacomp = (select round(sum(qte*pxvttc),2) from det_ticket "... +"inner join ticket on det_ticket.id_ticket = ticket.id_ticket "... +"where datfct = "+Quote(date2[i])+" and type_lg in ('ART','ANL','REM') "... +"group by datfct)" Execute_Requete(g_cReq,Faux) FIN
ça devrait pouvoir s'adapter.
A+
-- Pierre BOUSQUET
" Ne me dites pas que ce problème est difficile. S'il n'était pas difficile, ce ne serait pas un problème. "
quoi ! elle est pas bonne ma solution ?
lol
Jacques TREPP a émis l'idée suivante :
Salut Stéphane
j'ai une stat qui compare Jour N et jour N-1. j'utilise une table temporaire
que je remplis avec une requète:
mais le traitement part d'une table mémoire contenant les jours de la semaine
et des dates N et N-1. Le but étant de récupérer les CA N et N-1.
// --------------------------------- création de la table temporaire
g_cReq = "CREATE TABLE stat_compare ("...
+"joursemaine varchar(10) default NULL, "...
+"dateref date default NULL,"...
+"caref decimal(10,2) NULL default '0.00', "...
+"datecomp date default NULL, "...
+"cacomp decimal(10,2) NULL default '0.00'"...
+") ENGINE=InnoDB DEFAULT CHARSET=latin1"
SI PAS Execute_Requete() ALORS RETOUR
// --------------------------------- remplissage de la table
i est un entier
POUR i = 1 A TableOccurrence(Table1)
g_cReq = "insert into stat_compare set dateref = "+Quote(date1[i])+", "...
+"caref = (select round(sum(qte*pxvttc),2) from det_ticket "...
+"inner join ticket on det_ticket.id_ticket = ticket.id_ticket "...
+"where datfct = "+Quote(date1[i])+" and type_lg in ('ART','ANL','REM')
"...
+"group by datfct), "...
+"datecomp = "+Quote(date2[i])+", "...
+"cacomp = (select round(sum(qte*pxvttc),2) from det_ticket "...
+"inner join ticket on det_ticket.id_ticket = ticket.id_ticket "...
+"where datfct = "+Quote(date2[i])+" and type_lg in ('ART','ANL','REM') "...
+"group by datfct)"
Execute_Requete(g_cReq,Faux)
FIN
ça devrait pouvoir s'adapter.
A+
--
Pierre BOUSQUET
" Ne me dites pas que ce problème est difficile.
S'il n'était pas difficile, ce ne serait pas un problème. "
Salut Stéphane j'ai une stat qui compare Jour N et jour N-1. j'utilise une table temporaire que je remplis avec une requète: mais le traitement part d'une table mémoire contenant les jours de la semaine et des dates N et N-1. Le but étant de récupérer les CA N et N-1.
// --------------------------------- création de la table temporaire g_cReq = "CREATE TABLE stat_compare ("... +"joursemaine varchar(10) default NULL, "... +"dateref date default NULL,"... +"caref decimal(10,2) NULL default '0.00', "... +"datecomp date default NULL, "... +"cacomp decimal(10,2) NULL default '0.00'"... +") ENGINE=InnoDB DEFAULT CHARSET=latin1"
SI PAS Execute_Requete() ALORS RETOUR
// --------------------------------- remplissage de la table i est un entier POUR i = 1 A TableOccurrence(Table1) g_cReq = "insert into stat_compare set dateref = "+Quote(date1[i])+", "... +"caref = (select round(sum(qte*pxvttc),2) from det_ticket "... +"inner join ticket on det_ticket.id_ticket = ticket.id_ticket "... +"where datfct = "+Quote(date1[i])+" and type_lg in ('ART','ANL','REM') "... +"group by datfct), "... +"datecomp = "+Quote(date2[i])+", "... +"cacomp = (select round(sum(qte*pxvttc),2) from det_ticket "... +"inner join ticket on det_ticket.id_ticket = ticket.id_ticket "... +"where datfct = "+Quote(date2[i])+" and type_lg in ('ART','ANL','REM') "... +"group by datfct)" Execute_Requete(g_cReq,Faux) FIN
ça devrait pouvoir s'adapter.
A+
-- Pierre BOUSQUET
" Ne me dites pas que ce problème est difficile. S'il n'était pas difficile, ce ne serait pas un problème. "
Stéphane Miqueu
Stéphane Miqueu a présenté l'énoncé suivant :
Bonjour, Je bloque sur une requête alors si vous avez 2mn à m'accorder ...
Soit une table contenant toutes les lignes de factures depuis 1999. Je voudrais sortir un résultat sous la forme : Client / CA (N-1) / CA (N)
Pour l'instant j'ai fait 2 vues que je mixe mais je voudrais faire ça en une seule requête. Est-ce possible ? Je l'ai tourné dans tous les sens mais pour l'instant je sèche. Même SQLzoo ne m'a pas aidé, ou alors j'ai pas bien cherché.
Merci à tous, je regarde tout ça de près.
-- Ami Calmant Stéphane
Stéphane Miqueu a présenté l'énoncé suivant :
Bonjour,
Je bloque sur une requête alors si vous avez 2mn à m'accorder ...
Soit une table contenant toutes les lignes de factures depuis 1999.
Je voudrais sortir un résultat sous la forme :
Client / CA (N-1) / CA (N)
Pour l'instant j'ai fait 2 vues que je mixe mais je voudrais faire ça en une
seule requête. Est-ce possible ? Je l'ai tourné dans tous les sens mais pour
l'instant je sèche. Même SQLzoo ne m'a pas aidé, ou alors j'ai pas bien
cherché.
Bonjour, Je bloque sur une requête alors si vous avez 2mn à m'accorder ...
Soit une table contenant toutes les lignes de factures depuis 1999. Je voudrais sortir un résultat sous la forme : Client / CA (N-1) / CA (N)
Pour l'instant j'ai fait 2 vues que je mixe mais je voudrais faire ça en une seule requête. Est-ce possible ? Je l'ai tourné dans tous les sens mais pour l'instant je sèche. Même SQLzoo ne m'a pas aidé, ou alors j'ai pas bien cherché.
Merci à tous, je regarde tout ça de près.
-- Ami Calmant Stéphane
elecoest
On 28 mar, 10:59, Stéphane Miqueu wrote:
Stéphane Miqueu a présenté l'énoncé suivant :
> Bonjour, > Je bloque sur une requête alors si vous avez 2mn à m'accorder ...
> Soit une table contenant toutes les lignes de factures depuis 1999. > Je voudrais sortir un résultat sous la forme : > Client / CA (N-1) / CA (N)
> Pour l'instant j'ai fait 2 vues que je mixe mais je voudrais faire ça en une > seule requête. Est-ce possible ? Je l'ai tourné dans tous les sens mais pour > l'instant je sèche. Même SQLzoo ne m'a pas aidé, ou alors j'ai pa s bien > cherché.
select nvl(l1.client, l2.client), sum(nvl(l1.ca, 0)), sum(nvl(l2.ca, 0)) ligfac l1 outer join ligfac l2 on l1.client = l2.client and year(l1.date) = year(l2.date) - 1 group by nvl(l1.client, l2.client)
=> un client peut avoir du CA l'année n et pas l'année n+1 (client perdu) un client peut avoir du CA l'année n+1 et pas l'année n (client gagné)
D'où le outer join (ni left ni right on fait du pur produit cartésien) idem pour le subtilité nvl(l1.client, l2.client)
On 28 mar, 10:59, Stéphane Miqueu <stephane.miq...@free.fr> wrote:
Stéphane Miqueu a présenté l'énoncé suivant :
> Bonjour,
> Je bloque sur une requête alors si vous avez 2mn à m'accorder ...
> Soit une table contenant toutes les lignes de factures depuis 1999.
> Je voudrais sortir un résultat sous la forme :
> Client / CA (N-1) / CA (N)
> Pour l'instant j'ai fait 2 vues que je mixe mais je voudrais faire ça en une
> seule requête. Est-ce possible ? Je l'ai tourné dans tous les sens mais pour
> l'instant je sèche. Même SQLzoo ne m'a pas aidé, ou alors j'ai pa s bien
> cherché.
select nvl(l1.client, l2.client), sum(nvl(l1.ca, 0)), sum(nvl(l2.ca,
0))
ligfac l1 outer join ligfac l2 on l1.client = l2.client and
year(l1.date) = year(l2.date) - 1
group by nvl(l1.client, l2.client)
=> un client peut avoir du CA l'année n et pas l'année n+1 (client
perdu)
un client peut avoir du CA l'année n+1 et pas l'année n (client
gagné)
D'où le outer join (ni left ni right on fait du pur produit cartésien)
idem pour le subtilité nvl(l1.client, l2.client)
> Bonjour, > Je bloque sur une requête alors si vous avez 2mn à m'accorder ...
> Soit une table contenant toutes les lignes de factures depuis 1999. > Je voudrais sortir un résultat sous la forme : > Client / CA (N-1) / CA (N)
> Pour l'instant j'ai fait 2 vues que je mixe mais je voudrais faire ça en une > seule requête. Est-ce possible ? Je l'ai tourné dans tous les sens mais pour > l'instant je sèche. Même SQLzoo ne m'a pas aidé, ou alors j'ai pa s bien > cherché.
select nvl(l1.client, l2.client), sum(nvl(l1.ca, 0)), sum(nvl(l2.ca, 0)) ligfac l1 outer join ligfac l2 on l1.client = l2.client and year(l1.date) = year(l2.date) - 1 group by nvl(l1.client, l2.client)
=> un client peut avoir du CA l'année n et pas l'année n+1 (client perdu) un client peut avoir du CA l'année n+1 et pas l'année n (client gagné)
D'où le outer join (ni left ni right on fait du pur produit cartésien) idem pour le subtilité nvl(l1.client, l2.client)
Stéphane Miqueu
avait écrit le 28/03/2007 :
select nvl(l1.client, l2.client), sum(nvl(l1.ca, 0)), sum(nvl(l2.ca, 0)) ligfac l1 outer join ligfac l2 on l1.client = l2.client and year(l1.date) = year(l2.date) - 1 group by nvl(l1.client, l2.client)
=> un client peut avoir du CA l'année n et pas l'année n+1 (client perdu) un client peut avoir du CA l'année n+1 et pas l'année n (client gagné)
D'où le outer join (ni left ni right on fait du pur produit cartésien) idem pour le subtilité nvl(l1.client, l2.client)
Bonjour et merci pour ton aide.
Je regarde ta solution et j'essai de l'adapter. Par contre je ne connais pas la commande nvl ... TransacSQL ne connait pas non plus. Quel est l'usage de cette commande ?
-- Ami Calmant Stéphane
elecoest@gmail.com avait écrit le 28/03/2007 :
select nvl(l1.client, l2.client), sum(nvl(l1.ca, 0)), sum(nvl(l2.ca,
0))
ligfac l1 outer join ligfac l2 on l1.client = l2.client and
year(l1.date) = year(l2.date) - 1
group by nvl(l1.client, l2.client)
=> un client peut avoir du CA l'année n et pas l'année n+1 (client
perdu)
un client peut avoir du CA l'année n+1 et pas l'année n (client
gagné)
D'où le outer join (ni left ni right on fait du pur produit cartésien)
idem pour le subtilité nvl(l1.client, l2.client)
Bonjour et merci pour ton aide.
Je regarde ta solution et j'essai de l'adapter. Par contre je ne
connais pas la commande nvl ... TransacSQL ne connait pas non plus.
Quel est l'usage de cette commande ?
select nvl(l1.client, l2.client), sum(nvl(l1.ca, 0)), sum(nvl(l2.ca, 0)) ligfac l1 outer join ligfac l2 on l1.client = l2.client and year(l1.date) = year(l2.date) - 1 group by nvl(l1.client, l2.client)
=> un client peut avoir du CA l'année n et pas l'année n+1 (client perdu) un client peut avoir du CA l'année n+1 et pas l'année n (client gagné)
D'où le outer join (ni left ni right on fait du pur produit cartésien) idem pour le subtilité nvl(l1.client, l2.client)
Bonjour et merci pour ton aide.
Je regarde ta solution et j'essai de l'adapter. Par contre je ne connais pas la commande nvl ... TransacSQL ne connait pas non plus. Quel est l'usage de cette commande ?
-- Ami Calmant Stéphane
Firetox
Bonjour stephane
nvl est la fonction ifnull en mySQLou postGreSQL mais pour oracle c'est NVL sous SQLServeur c'est :isnull ou ifnull
IFNULL(val1,val2) la fonction renvoie la val2 si val1 est null sinon val1
Bon dev @+
Firetox
"Stéphane Miqueu" a écrit dans le message de news:
avait écrit le 28/03/2007 :
select nvl(l1.client, l2.client), sum(nvl(l1.ca, 0)), sum(nvl(l2.ca, 0)) ligfac l1 outer join ligfac l2 on l1.client = l2.client and year(l1.date) = year(l2.date) - 1 group by nvl(l1.client, l2.client)
=> un client peut avoir du CA l'année n et pas l'année n+1 (client perdu) un client peut avoir du CA l'année n+1 et pas l'année n (client gagné)
D'où le outer join (ni left ni right on fait du pur produit cartésien) idem pour le subtilité nvl(l1.client, l2.client)
Bonjour et merci pour ton aide.
Je regarde ta solution et j'essai de l'adapter. Par contre je ne connais pas la commande nvl ... TransacSQL ne connait pas non plus. Quel est l'usage de cette commande ?
-- Ami Calmant Stéphane
Bonjour stephane
nvl est la fonction ifnull en mySQLou postGreSQL mais pour oracle c'est NVL
sous SQLServeur c'est :isnull ou ifnull
IFNULL(val1,val2)
la fonction renvoie la val2 si val1 est null sinon val1
Bon dev
@+
Firetox
"Stéphane Miqueu" <stephane.miqueu@free.fr> a écrit dans le message de news:
mn.eb8a7d73e529b1cc.63824@free.fr...
elecoest@gmail.com avait écrit le 28/03/2007 :
select nvl(l1.client, l2.client), sum(nvl(l1.ca, 0)), sum(nvl(l2.ca,
0))
ligfac l1 outer join ligfac l2 on l1.client = l2.client and
year(l1.date) = year(l2.date) - 1
group by nvl(l1.client, l2.client)
=> un client peut avoir du CA l'année n et pas l'année n+1 (client
perdu)
un client peut avoir du CA l'année n+1 et pas l'année n (client
gagné)
D'où le outer join (ni left ni right on fait du pur produit cartésien)
idem pour le subtilité nvl(l1.client, l2.client)
Bonjour et merci pour ton aide.
Je regarde ta solution et j'essai de l'adapter. Par contre je ne connais
pas la commande nvl ... TransacSQL ne connait pas non plus. Quel est
l'usage de cette commande ?
nvl est la fonction ifnull en mySQLou postGreSQL mais pour oracle c'est NVL sous SQLServeur c'est :isnull ou ifnull
IFNULL(val1,val2) la fonction renvoie la val2 si val1 est null sinon val1
Bon dev @+
Firetox
"Stéphane Miqueu" a écrit dans le message de news:
avait écrit le 28/03/2007 :
select nvl(l1.client, l2.client), sum(nvl(l1.ca, 0)), sum(nvl(l2.ca, 0)) ligfac l1 outer join ligfac l2 on l1.client = l2.client and year(l1.date) = year(l2.date) - 1 group by nvl(l1.client, l2.client)
=> un client peut avoir du CA l'année n et pas l'année n+1 (client perdu) un client peut avoir du CA l'année n+1 et pas l'année n (client gagné)
D'où le outer join (ni left ni right on fait du pur produit cartésien) idem pour le subtilité nvl(l1.client, l2.client)
Bonjour et merci pour ton aide.
Je regarde ta solution et j'essai de l'adapter. Par contre je ne connais pas la commande nvl ... TransacSQL ne connait pas non plus. Quel est l'usage de cette commande ?