Joomla.it Forum
Non solo Joomla... => Database => : rayman 12 Mar 2008, 07:01:54
-
Salve a tutti
Avendo gia una certa dimestichezza con DBQUERY leggendo il tutorial in inglese riesco non solo ad estrapolare i dati che mi servono dalle tabelle ma cosa piu importante creare le cosiddette "view" ovvero il pulsante "Dettagli" di ogni singolo record.
Adesso ho un problema:
Nello stesso report voglio che vengano fuori alcune colonne le quali sintatticamente risultano da diverse query
In dettaglio voglio che ad ogni ditta corrispondano due colonne messe accanto dove risultino i soldi (somma) che deve ad oggi e alla stessa data del 2007
| Ditta | Anno 2008 | Anno 2007 |
|Nomeditta| Somma riferita a oggi 2008|Somma riferita stessa data ma 2007|
non entrando troppo nel dettaglio delle sintassi sql per fare ciò sono necessarie due query leggermente differenti
La mia domanda è :
è possibile , sempre con DBQUERY inserire più query SQL nella stessa voce DBQUERY-----> Query?COme? Con quale sintassi?
Grazie per l'eventuale supporto
Rayman
-
ciao rayman ,
puoi spiegarti un po meglio?
Nello stesso report voglio che vengano fuori alcune colonne le quali sintatticamente risultano da diverse query
???
Una query che pesca da piu di una tabella?
-
No è una query che pesca dalla stessa tabella ma in due condizioni differenti ovvero:
A me interessa mostrare dei report dove sulla colonna 1 ci trovo le ditte nella colonna due i soldi(somma) dei soldi che ogni ditta deve relative all'anno 2008 e nella terza colonna sempre la somma dei soldi in credito ma riferita al 2007
ora nella tabella ho il campo Ditta il campo Data in formato aaaa-mm-gg e il campo soldi
io ho fatto
SELECT
Ditta AS $<d_ditta>,
SUM(soldi) AS $<soldi2008>,
SUM(soldi AS $<soldi2007>
WHERE soldi >0 (per eliminare i campi vuoti ( IS NOT NULL da errore)
AND Data >= 2008-01-01
GROUP BY Ditta
Mi spunta una tabella con i tre campi Ditta (raggruppato) Soldi 2008 (somma) e Soldi 2007 ( somma) L'unico problema che le due colonne danno risultato identico . Cosa posso fare per differenziare le condizioni ? Voglio che la colonna soldi 2008 abbia la condizione WHERE Data >= 2008-01-01 (così si autoaggiorna) e la colonna Soldi 2007 abbia la condizione WHERE Dat BETWEEN 2007-12-31 AND 2007-01-01
Grazie per ogni valido aiuto
Rayman
-
(manca la FROM nella tua query ma penso tu la abbia dimenticata di scrivere :))
SELECT
a.Ditta AS $<d_ditta>,
SUM(a.soldi) AS $<soldi2008>,
SUM(b.soldi) AS $<soldi2007>
From tuatabella a,tuatabella b
WHERE soldi >0
AND a.Data >= 2008-01-01 and b.data BETWEEN 2007-12-31 AND 2007-01-01
GROUP BY Ditta
Praticamente dai due alias divesi alla stessa tabella e le metti in join e tutto dovrebbe andare ok.
(per eliminare i campi vuoti ( IS NOT NULL da errore)
dovresti provare la LEFT JOIN
ciao buon lavoro
-
non capisco perche non mi fa modificare il post cmq..
una correzione
SELECT
a.Ditta AS $<d_ditta>,
SUM(a.soldi) AS $<soldi2008>,
SUM(b.soldi) AS $<soldi2007>
From tuatabella a,tuatabella b
WHERE a.soldi >0 and b.soldi >0
AND a.Data >= 2008-01-01 and b.data BETWEEN 2007-12-31 AND 2007-01-01
GROUP BY Ditta
-
Certamente quello che ho tralasciato a scrivere qui nel post è stata una mera dimenticanza formale .
Proverò quello che mi suggerisci speriamo che vada tutto bene intanto ti ringrazio per il validissimo aiuto
RayMan
-
Marco ho provato la query secondo le tue indicazioni e di primo acchitto mi dava errore ma poi facendo alcune prove sono riuscito a venirne a capo ovvero le condizioni le ho cambiate così
WHERE a.Data >= 2008-01-01 and a.soldi >0
AND b.Data <= 2007-12-31 and b.soldi >0
GROUP by a.Ditta
Comunque ti ringrazio per avermi dato l'illuminazione degli Alias perche adesso che dovrò inserire altre colonne mi vedrò a creare c. d. e. f. e via discorrendo
Quando avrò altri intoppi potrò abusare della tua disponibilità?
RayMan
-
oops è vero ho dimenticato di mettere GROUP BY a.Ditta... ::)
Quando avrò altri intoppi potrò abusare della tua disponibilità?
Ovviamente :)
ciao e buon lavoro
-
Quii le cose si complicano seguendo le stesse sintassi ho aggiunto altre due colonne con Alias "c" e "d"
SELECT
a.Ditta AS $<d_ditta>,
SUM(a.soldi) AS $<soldi2008>,
SUM(b.soldi) AS $<soldi2007>,
SUM(c.soldi) AS $<c_soldi2008>,
SUM(d.soldi) AS $<d_soldi2007>
From tuatabella a,tuatabella b, tuatabella c, tuatabella d
WHERE a.Data >= 2008-01-01 and a.soldi >0 and a.Tipo_Ditta = 'Mercantile'
AND b.data <= 2007-12-31 and b.soldi >0 and b.Tipo_Ditta = 'Mercantile'
AND c.Data >= 2008-01-01 and c.soldi >0 and c.Tipo_Ditta = 'Commerciale'
AND d.Data >= 2008-01-01 and d.soldi >0 and d.Tipo_Ditta = 'Commerciale'
GROUP BY a.Ditta
Spero che la schifezza che ho fatto sia quantomeno comprensibile :
In prativa voglio 5 colonne
1) Lista delle ditte
2) somma dei soldi delle ditte mercantili anno 2008
3) somma dei soldi delle ditte mercantili anno 2007
4) somma dei soldi delle ditte Commerciali anno 2008
5) somma dei soldi delle ditte Commerciali anno 2007
Con questa sintassi mi da errore e con piccoli accorgimenti mi da numeri tutti sballati e sicuramente non veritieri
Ti ringrazio in anticipo per ogni tuo valido consiglio!!!
-
mmmm...
AND c.Data >= 2008-01-01 and c.soldi >0 and c.Tipo_Ditta = 'Commerciale'
AND d.Data >= 2008-01-01 and d.soldi >0 and d.Tipo_Ditta = 'Commerciale'
GROUP BY a.Ditta
non so se sia questo l'errore o è un semplice errore di trascrizione ma la WHERE condition della somma dei soldi delle ditte Commerciali anno 2007 mi pare sbagliata visto che è identica a la WHERE condition della somma dei soldi delle ditte Commerciali anno 2008!
AND c.Data >= 2008-01-01 and c.soldi >0 and c.Tipo_Ditta = 'Commerciale'
AND d.Data <= 2007-12-31 and d.soldi >0 and d.Tipo_Ditta = 'Commerciale'
-
si un errore ma eventualmente non è possibile impostare la cosa in un altro modo magari utilizzando un SELF JOIN?
Che ne pensi?
Rayman