Newsgroup: it.lavoro.informatica
Titolo: Query oracle

Ciao,
sono alle prime armi con oracle abbiate pietà.
Ho una tabella contenente informazioni di tipo contabile di alcune
società.I campi  sono: azienda,conto, anno, mese, importo.
Ho la necessità di visualizzare i dati in modo diverso ovvero
eliminando la colonna mese e importo sostituendoli con 12 nuove
colonne del tipo Importo gennaio, importo febbraio etc...
Grazie per i suggerimenti.



select pippo as 'importo gennaio' from.... dovrebbe essere una sintassi 
bevuta anche da oracle (che non conosco)
S. 
p.s. OT qui, chiedi altrove


Mi sa che non si è incartato per questo... è entrato nel magico mondo del 
pivottamento lato db... :-)

 pivottamento lato db... :-)
Ragazzi, forse non mi sono spiegato bene,
mi servono 12 nuove colonne ognuna delle quali contenga gli importi
del mese corrispondente:
Adesso: Azienda, conto, anno, mese, importo
Vorrei: Azienda, conto, anno, importo gennaio, importo
febbraio,.......importo dicembre

 febbraio,.......importo dicembre
non ti servono.. hai già mese ed anno.. per ricavarti quei dati fai una 
query
google e "sql case oracle syntax" ti illuminerà
S.


Ok,  sono OT e quindi mi fermo quì...faccio notare però 2 cose:
1) sembra che molti scrivano su questo forum solo per dare risposte
sgarbate
2) col case when ottengo una colonna che mi indica se l'importo è di
un mese o di un altro
  e con buona pace di Stefano Zamboni, pur avendo già l'informazione
nella query di partenza, a me "servono" 12 colonne      importo una
per ogni mese.
Tante belle cose


Scusami Vuoland,
una tabella importi_mese con il campo importi in LONG (o come ti pare)
con la chiave comune "mese" no???
Con una query in Join ottieni tutto.


E vabbe', devi anche raggruppare e fare le somme, in t-sql con sql server 
sarebbe così, con oracle credo cambi molto poco:
select
    Azienda, Conto, Anno,
    sum (case when mese= 1 then importo else 0 end) as Gennaio,
    sum (case when mese= 2 then importo else 0 end) as Febbraio,
    ....
from Tabella
group by Azienda, Conto, Anno
order by Azienda, Conto, Anno
E per l'appunto quel che fai è pivottare i dati, cioè trasformare le righe 
in colonne.
Se hai tanti dati e indici non appropriati, ovviamente la query sarà lenta.

 Grazie per i suggerimenti.
SELECT azienda,anno,
MAX (DECODE (mese, 1, importo, NULL)) Gennaio,
MAX (DECODE (mese, 2, importo, NULL)) Febbraio,
MAX (DECODE (mese, 3, importo, NULL)) Marzo,
...
FROM (SELECT mese, azienda,anno, importo FROM tabella)
GROUP BY azienda,anno;
Non l'ho provata, vedi se va

 GROUP BY azienda,anno;
manca il conto
SELECT azienda,anno,conto,
MAX (DECODE (mese, 1, importo, NULL)) Gennaio,
MAX (DECODE (mese, 2, importo, NULL)) Febbraio,
MAX (DECODE (mese, 3, importo, NULL)) Marzo,
...
FROM (SELECT mese, azienda,anno,conto, importo FROM tabella)
GROUP BY azienda,anno,conto;

 Non l'ho provata, vedi se va
Grazie Ale e Roberto, ora è chiaro.
Sapete indicarmi dove postare queste domande per non essere OT?


Non capisco il max, non è che intendevi la sum?


ho scritto max perchč avevo in mente righe singole, chiaramente sum va 
bene (meglio visto che vale sempre)

 Sapete indicarmi dove postare queste domande per non essere OT?
nella gerarchia it.* c'è it.comp.software.database, per Oracle poi ci sono 
diverse altre risorse non su usenet (qui il server di BT mi da dei gruppi 
usenet Oracle.*, ma non mi sembrano per i tuoi scopi).
Probabilmente fai meglio ad iniziare leggendoti un qualche libro, alcuni su 
Oracle sono fatti veramente bene.
Oppure se conosci l'Inglese puoi dare un'occhiata ad Ask Tom:
http://asktom.oracle.com/pls/apex/f?p=100:1:0
Poi ovviamante ci sono cose come Stackoverflow, vel similia, immagino ci 
siano risorse simili anche in Italiano.
-- 
ale
http://ale.riolo.co.uk
 

 alcuni su Oracle sono fatti veramente bene.
si, direi di iniziare con qualche libro :-)))