Back to top

Autore Topic: [RISOLTO] formattazione risultato query  (Letto 9461 volte)

Offline federcla

  • Esploratore
  • **
  • Post: 139
  • Sesso: Maschio
    • Mostra profilo
[RISOLTO] formattazione risultato query
« il: 18 Set 2013, 15:22:29 »
Ciao a tutti,
non riesco a fare una cosa e mi servirebbe una mano.
Ho una tabella con 3 colonne, anno, mese, importo, dove inserisco ogni mese l'importo di una lavorazione. Ora ho la necessita di impagginare i risultati in questo modo

mese       2010    2011     2012     2013
gennaio   500      100       300      200
febbraio   100      200      300      100
ecc ecc

devo però farlo con una query perchè la devo inserire in un modulo che sto usando che mi permette di usare solo linguaggio SQL.

Mi potete aiutare?
grazie
« Ultima modifica: 24 Set 2013, 12:14:53 da federcla »

Offline federcla

  • Esploratore
  • **
  • Post: 139
  • Sesso: Maschio
    • Mostra profilo
Re:formattazione risultato query
« Risposta #1 il: 19 Set 2013, 16:25:43 »
Nessuno sa aiutarmi  :(

Offline giusebos

  • Fuori controllo
  • *
  • Post: 21748
  • Sesso: Maschio
  • Giuseppe Serbelloni Mazzanti Viendalmare
    • Mostra profilo
Re:formattazione risultato query
« Risposta #2 il: 19 Set 2013, 16:29:44 »
sto ancora cercando (forse anche altri che hanno letto il post) di capire se devi formattare (quindi questione legata all'aspetto) o devi prendere il risultato di una query e visualizzarlo in una pagina (quindi un problema di paginazione).



su www.icagenda.it guide e tutorial con esempi di chronoforms e chronoconnectivity

Offline federcla

  • Esploratore
  • **
  • Post: 139
  • Sesso: Maschio
    • Mostra profilo
Re:formattazione risultato query
« Risposta #3 il: 19 Set 2013, 16:43:42 »
Sono riuscito a creare più confusione ve?  ;D

devo fare una query che impagini il risultato come ti ho descritto nel post precedente.

Sto utilizzando Plotalot così da avere dei grafici dell'andamento per anno, il grafico sono riuscito a farlo ma ora devo inserire nella pagina una tabella con i valori del grafico, messi in questo modo

mese       2010    2011     2012     2013
gennaio   500      100       300      200
febbraio   100      200      300      100
ecc ecc

il problema è che nella tabella i valori li ho in questo modo

gennaio 2010 500
febbraio 2010 100
gennaio 2011 100
febbraio 2011 200
ecc ecc

Se fosse possibile inserire codice php la fare io a mano l'impaginazione, ma non credo che Plotalot mi permetta di farlo, così mi serve una query che mi resituisca i dati in questo modo
Solo che non so dove sbattere la testa

Spero di essere riuscito a spiegarmi meglio
« Ultima modifica: 19 Set 2013, 16:48:38 da federcla »

Offline giusebos

  • Fuori controllo
  • *
  • Post: 21748
  • Sesso: Maschio
  • Giuseppe Serbelloni Mazzanti Viendalmare
    • Mostra profilo
Re:formattazione risultato query
« Risposta #4 il: 19 Set 2013, 17:25:38 »
Citazione
Spero di essere riuscito a spiegarmi meglio
no, ma ti avevo fatto una domanda, dovevi rispondere solo opzione 1 opzione2.

va bene ci sarà qualcuno che meglio di me capirà ;)
su www.icagenda.it guide e tutorial con esempi di chronoforms e chronoconnectivity

Offline federcla

  • Esploratore
  • **
  • Post: 139
  • Sesso: Maschio
    • Mostra profilo
Re:formattazione risultato query
« Risposta #5 il: 19 Set 2013, 17:49:28 »
Non so come spiegarti meglio  :)

Grazie per il tentativo cmq  :)

Offline federcla

  • Esploratore
  • **
  • Post: 139
  • Sesso: Maschio
    • Mostra profilo
Re:formattazione risultato query
« Risposta #6 il: 20 Set 2013, 13:19:39 »
Con questa query sono riuscito in parte a fare quello che mi serve

Codice: [Seleziona]
SELECT DISTINCT(mese), (SELECT importo FROM sks_app_fat WHERE mese = 1 AND anno = 2012) AS '2012', (SELECT importo FROM sks_app_fat WHERE mese = 1 AND anno = 2013) AS '2013' FROM sks_app_fat WHERE mese = 1

mi restituisce questo risultato

mese      2012     2013
1            1000     1500


Ora dovrei riuscire a farlo per tutti e 12 i mesi, ho inserito WHERE mese between 1 and 12

però mi restituisce sempre gli stessi valori per 12 volte

credo che sia necessaria una stored procedure con un ciclo, ma non sono molto pratico sull'argomento, mi potete aiutare?

[/t][/t]

Offline tomtomeight

  • Global Moderator
  • Fuori controllo
  • ********
  • Post: 32046
  • Sesso: Maschio
  • Gli automatismi aiutano ma non insegnano nulla.
    • Mostra profilo
Re:formattazione risultato query
« Risposta #7 il: 20 Set 2013, 14:13:48 »
Se metti mese > 1

Offline federcla

  • Esploratore
  • **
  • Post: 139
  • Sesso: Maschio
    • Mostra profilo
Re:formattazione risultato query
« Risposta #8 il: 20 Set 2013, 14:25:59 »
Se metto > 1 nell'ultimo WHERE mi da lo stesso problema, solo che parte da 2

se metto > 1 nelle select tra parentisi mi torna questo errore:
Subquery returns more than 1 row

é per questo che avevo pensato ad una Stored procedures, così da poter usare un ciclo

Offline tomtomeight

  • Global Moderator
  • Fuori controllo
  • ********
  • Post: 32046
  • Sesso: Maschio
  • Gli automatismi aiutano ma non insegnano nulla.
    • Mostra profilo
Re:formattazione risultato query
« Risposta #9 il: 20 Set 2013, 14:27:17 »
devi fare un ciclo foreach.

Offline federcla

  • Esploratore
  • **
  • Post: 139
  • Sesso: Maschio
    • Mostra profilo
Re:formattazione risultato query
« Risposta #10 il: 20 Set 2013, 14:29:23 »
In sql?

Offline federcla

  • Esploratore
  • **
  • Post: 139
  • Sesso: Maschio
    • Mostra profilo
Re:formattazione risultato query
« Risposta #11 il: 20 Set 2013, 14:35:59 »
Quello che ho provato a fare ora è questo


CREATE PROCEDURE JCAI ()
BEGIN
 DECLARE var INT;
 SET var = 1;
 WHILE var <= 12 DO
  SELECT DISTINCT(mese), (SELECT importo FROM sks_app_fat WHERE mese = var AND anno = 2012) AS '2012', (SELECT importo FROM sks_app_fat WHERE mese = var AND anno = 2013) AS '2013' FROM sks_app_fat WHERE mese = var;
  SET var = var + 1;
 END WHILE;
END; //

mi ha restituito questo errore

 CREATE  PROCEDURE JCAI(  )  BEGIN  DECLARE var INT;

 
 Messaggio di MySQL: Documentazione
  #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 3

mau_develop

  • Visitatore
Re:formattazione risultato query
« Risposta #12 il: 20 Set 2013, 16:14:40 »
usa le join e se non basta le union

Offline federcla

  • Esploratore
  • **
  • Post: 139
  • Sesso: Maschio
    • Mostra profilo
Re:formattazione risultato query
« Risposta #13 il: 20 Set 2013, 16:27:05 »
Scusa ma non ti seguo, i dati sono tutti nella stessa tabella come faccio a usare le join?

ho provato con la UNION ma va in errore

SELECT distinct(mese), (importo) as '2012'
FROM sks_app_fat WHERE anno = 2012
UNION
SELECT (importo) as '2013'
FROM sks_app_fat WHERE anno = 2013

questo è l'errore:
#1222 - The used SELECT statements have a different number of columns

Offline federcla

  • Esploratore
  • **
  • Post: 139
  • Sesso: Maschio
    • Mostra profilo
Re:formattazione risultato query
« Risposta #14 il: 20 Set 2013, 18:07:22 »
CI SONO RIUSCITO!!!!!!!!!!!!

Bisogna farlo con le JOIN  ;D ;D ;D ;D ;D


Ora stacco, lunedì metto la soluzione e inserisco risolto


GRAZIE MILLE A TUTTI, IN PARTICOLARE A M_W_C
« Ultima modifica: 20 Set 2013, 18:11:08 da federcla »

Offline federcla

  • Esploratore
  • **
  • Post: 139
  • Sesso: Maschio
    • Mostra profilo
Re:formattazione risultato query
« Risposta #15 il: 23 Set 2013, 16:00:44 »
Come promesso inserisco la query che mi da il risultato che stavo cercando :)


Select a.mese AS Mese, (FORMAT(a.importo,2)) as '2012', (FORMAT(b.importo,2)) as '2013' from sks_app_fat as a, sks_app_fat as b WHERE a.anno = 2012 AND b.anno = 2013 and a.mese = b.mese  and a.tipo = 'y_class' and a.tipo = b.tipo

Questa mi restituisce la pagina come serve a me :)
In pratica richiamo 2 volte la stessa tabella rinominandola una volta 'a' e una volta 'b', poi un po' di confronti con i valori uguali e il gioco è fatto :)



Offline federcla

  • Esploratore
  • **
  • Post: 139
  • Sesso: Maschio
    • Mostra profilo
Re:formattazione risultato query
« Risposta #16 il: 23 Set 2013, 16:07:51 »
Ora però ho un altro problema, mi è stato chiesto di fare anche la somma delle colonne e di prelevare la media per ogni colonna.

Così ho modificato la query in questo modo:

Select a.n_mese AS 'N Mese', a.mese AS 'Mese', (FORMAT(a.importo,2)) as '2012', (FORMAT(b.importo,2)) as '2013' from sks_app_fat as a, sks_app_fat as b WHERE a.anno = 2012 AND b.anno = 2013 and a.mese = b.mese  and a.tipo = 'y_class' and a.tipo = b.tipo
UNION
Select ' ', ' ', ' ', ' ' from sks_app_fat
UNION
Select ' ','TOT', FORMAT(SUM(a.importo),2), FORMAT(SUM(b.importo),2) from sks_app_fat as a, sks_app_fat as b WHERE a.anno = 2012 AND b.anno = 2013 and a.mese = b.mese  and a.tipo = 'y_class' and a.tipo = b.tipo
UNION
Select ' ', ' ', ' ', ' ' from sks_app_fat
UNION
Select ' ','MEDIA MESE', FORMAT(AVG(a.importo),2), FORMAT(AVG(b.importo),2) from sks_app_fat as a, sks_app_fat as b WHERE a.anno = 2012 AND b.anno = 2013 and a.mese = b.mese  and a.tipo = 'y_class' and a.tipo = b.tipo


Il problema è che mi salta l'ordinamento, sto cerccando di usare la ORDER BY a.n_mese ASC, ma non funziona

mi potreste dare una mano a superare anche questo scoglio?

Grazie

PS. queste righe (Select ' ', ' ', ' ', ' ' from sks_app_fat) le ho inserite per fare una riga vuota nella tabella

Offline federcla

  • Esploratore
  • **
  • Post: 139
  • Sesso: Maschio
    • Mostra profilo
Re:formattazione risultato query
« Risposta #17 il: 24 Set 2013, 12:11:26 »
Risoloto anche il problema con l'ORDER BY  ;D

Questa è la query modificata:

(Select a.mese AS 'Mese', (FORMAT(a.importo,2)) as '2012', (FORMAT(b.importo,2)) as '2013' from sks_app_fat as a, sks_app_fat as b WHERE a.anno = 2012 AND b.anno = 2013 and a.mese = b.mese  and a.tipo = 'y_class' and a.tipo = b.tipo ORDER BY a.n_mese LIMIT 12)
UNION
(Select ' ', ' ', ' ' from sks_app_fat)
UNION
(Select 'TOT', FORMAT(SUM(a.importo),2), FORMAT(SUM(b.importo),2) from sks_app_fat as a, sks_app_fat as b WHERE a.anno = 2012 AND b.anno = 2013 and a.mese = b.mese  and a.tipo = 'y_class' and a.tipo = b.tipo)
UNION
(Select 'MEDIA MESE', FORMAT(AVG(a.importo),2), FORMAT(AVG(b.importo),2) from sks_app_fat as a, sks_app_fat as b WHERE a.anno = 2012 AND b.anno = 2013 and a.mese = b.mese  and a.tipo = 'y_class' and a.tipo = b.tipo)

In pratica ho racchiuso le query tra parentesi ed ho aggiunto alla prima l'ORDER BY "campo di interesse" LIMIT "limite"
Serve usare entrambe le condizioni per far si che la query restituisca l'ordinamento corretto quando si usa la UNION  ;)

Qui trovate la guida alle UNION di MySQL
http://dev.mysql.com/doc/refman/5.0/en/union.html
 
« Ultima modifica: 24 Set 2013, 12:14:07 da federcla »

 



Web Design Bolzano Kreatif