Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1

    [SQL] raggruppare più record e restituirne una sola riga

    Ciao
    vengo subito al dunque, ho 4 tabelle cosi formate:

    codice:
    tabella FORNITORE:
    
    Cod | Nome | Indirizzo | Piva | Telefono
          |         |             |        | 
    
    
    tabella MAGAZZINO:
    
    Cod | Cod_forn | Quantita | Unitario | Totale | Data
          |              |             |            |           |   
    
    
    tabella ACCONTI:
    
    Cod | Acconto | Data | Note
          |             |        |   
    
    
    tabella ACCORPA:
    
    Cod | Cod_Acconto | Cod_magazzino
          |                    |
    la tabella fornitori contiene l'anagrafica dei fornitori.
    La tabella magazzino contiene i vari movimenti di acquisto di un aritcolo.
    La tabella acconti viene utilizzata per poter inserire uno o più acconti.
    La tabella Accorpa serve per creare il legame tra l'acconto e l'acquisto dell'articolo, visto che deve esserci la possibilità di pagare più acquisti (per esempio se si paga a fine mese un fornitore che ci ha venduto l'articolo più volte)

    Ora, sperando di essermi spiegato, il mio problema è quello di ottenere una tabella che contenga il riassunto di queste, del tipo:

    codice:
    Fornitore | dal.... | Al.... | Totale | Acconto
                 |          |        |          |
    dove "dal..." e "al..." sono le date di riferimento del pagamento.
    Come devo procedere? non riesco a trovare una soluzione.

    Grazie

  2. #2

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,315
    ciao,

    non so se e' corretto avere la tabella 'arccorpa', forse la potresti eliminare inserendo nella tabella acconti il codice del movimento magazzino.


    prova a postare la struttura delle tue tabelle, specificando anche il tipo di campo

    comunque per risolvere il tuo problema batsa fare qualcosa del genere

    codice:
    select
    magazzino.cod_forn,
    sum(acconti.acconto)
    from acconti
    left join accorpa on accorpa.cod_acconto = acconti.cod
    left join magazzino on magazzino.cod = accorpa.cod_magazzino
    where acconti.data>=: DataDal and acconti.data<=: DataAl
    group by 
    magazzino.cod_forn
    ciao

  4. #4
    Mi spiego meglio, la tabella accorpa la utilizzo perchè si tratta di una relazione molti a molti. Infatti non posso specificare il codice del magazzino nella tabella acconti perchè l'acconto si può riferire a più movimenti del magazzino (ho fatto l'esempio di pagare a fine mese tutti i movimenti).
    Inoltre quello che vorrei restituito non è la lista di acconti specificati in 2 date ma tutti i vari abbinamenti. Per fare un esempio vorrei che mi ritornasse una cosa del tipo: Ho dato un totale di acconti di 300,00€ sul totale di spesa di 550,00€ al fornitore Pippo per la forniture della merce di Marzo (dal 1/03/08 al 31/03/08) e cosi via per tutti i periodi e i fornitori.

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,315
    ok. io penso che puoi risolvere con una quesry simile a quella che ti ho postato.

    al massimo risolverai il tutto con una stored.

    ti ripeto.... posta la struttura delle tabelle in questione

  6. #6
    codice:
    tabella FORNITORE:
    
    Cod | Nome | Indirizzo | Piva | Telefono
        |      |           |      | 
    
    Cod= PrimariKey, Intero
    Nome=Alfanumerico(40)
    Indirizzo=AlfaNumerico(50)
    Piva=Alfanumerico(11)
    Telefono=Alfanumerico(15)
    
    
    tabella MAGAZZINO:
    
    Cod | Cod_forn | Quantita | Unitario | Totale | Data
        |          |          |          |        |   
    
    Cod= PrimariKey, Intero
    Cod_forn=Intero, che si riferisce al campo Cod della tabella fornitori
    Quantita=Intero
    Unitario=Valuta
    Totale=Valuta
    Data=Date
    
    
    tabella ACCONTI:
    
    Cod | Acconto | Data | Note
        |         |      |   
    
    Cod= PrimariKey, Intero
    Acconto=Valuta
    Data=Date
    Note=Alfanumerico(150)
    
    tabella ACCORPA:
    
    Cod | Cod_Acconto | Cod_magazzino
        |             |
    
    Cod= PrimariKey, Intero
    Cod_Acconto=Intero, che si riferisce al campo Cod della tabella acconti
    Cod_magazzino=Intero, che si riferisce al campo Cod della tabella magazzino
    Ovviamente la struttura posso cambiarla per creare una più corretta relazione fra i DB

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,315
    ok per la struttura postata.

    adesso pero devi chiarire le idee per il risultato che vuoi ottenere.....mi spiego

    nell'intervallo di date cosa devi conteggiare gli acconti incassati nel periodo o il valore della merce venduta nel periodo?

    non puoi escludere la possibilità di ottenere un acconto in un intervallo di tempo esterno alla vendita del prodotto

    Ovviamente la struttura posso cambiarla per creare una più corretta relazione fra i DB
    devi fare una attenta analisi.....
    questa cosa la devi decidere prima di andare avanti, altrimenti rischi di modificare in continuazione la tua procedura incorrendo quasi sicuramente in errori.

  8. #8
    nell'intervallo di date cosa devi conteggiare gli acconti incassati nel periodo o il valore della merce venduta nel periodo?
    Nell'intervallo di date va conteggiato il periodo della merce venduta (quella indicata nella tabella magazzino per intenderci), quindi l'acconto viene dato in base all'acquisto fatto in quel periodo (da qui il totale degli acquisti), prima ho fatto l'esempio di pagare un fornitore a ogni fine mese.

    non puoi escludere la possibilità di ottenere un acconto in un intervallo di tempo esterno alla vendita del prodotto
    si quello infatti non lo escludo, anzi è quasi ovvio che sarà esterno a quel periodo.

  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,315
    bene! allora quel'e' il tuo problema!?
    ti consiglierei di creare una stored che faccia tutto questo.....
    il problema che hai esposto e' molto semplice.....

    questa ti restituisce l'importo totale dei singoli fornitori nel periodo richiesto...
    codice:
    select
    magazzino.cod_forn,
    fornitore.nome,
    sum(magazzino.totale) TataleVenduto
    from magazzino
    left join fornitore on fornitore.cod = magazzino.cod_forn
    where magazzino.data>=: DataDal and magazzino.data<=: DataAl
    group by 
    magazzino.cod_forn,
    fornitore.nome
    adesso devi solo conteggiare gli acconti dati a fronte dei movimenti inclusi in questi totali...

    questa ti restituisce l'importo totale degli acconti dati, dal fornitore selezionato, in riferimento ai movimenti di magazzino nel periodo richiesto...

    codice:
    select
    sum(acconti.acconto)
    from acconti
    left join accorpa on accorpa.cod_acconto = acconti.cod
    left join magazzino on magazzino.cod = accorpa.cod_magazzino
    where 
    magazzino.data>=: DataDal and magazzino.data<=: DataAl
    magazzino.cod_for=:Fornitore

    scriviti una stored....cosi risolvi in poco tempo

    fai attenzione che non ho potuto testare le query che ti ho postato, per cui potrebbero esserci errori.

    io utilizzo firebird sql.

    ciao

  10. #10
    grazie tante, provo e ti faccio sapere come è andata..

    ciao..

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.