Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    Fatturato annuale per cliente

    Buongiorno,
    in un db MySQL 5.0.5 dalla tabella tesdoc contenente le testate delle fatture dovrei ottenere per gli anni
    dal 2018 al 2021 i totali per ogni cliente del n. di fatture emessegli ed il totale imponibili ottenendo
    un elenco del tipo:

    ----------------------------------------------------------------------
    | id_cliente | n_fatt2021 | tot_fatt2021 | n_fatt2020 | tot_fatt2020 | ... e altre colonne x 2019 e 2018
    ----------------------------------------------------------------------
    | tizio | 3 | 31500.00 | 4 | 57000.00 | ... ecc.
    ----------------------------------------------------------------------
    | caio | 13 | 72860.00 | 8 | 65478.00 | ... ecc.

    Purtroppo non conosco molto sql e risco a fare solo i totali x un singolo anno
    ma non so come fare i totali per piu' anni come campi nello stesso record.
    Qualcuno mi puo' aiutare ? Grazie.

  2. #2
    in pratica stai cercando di fare pivot https://www.google.com/search?q=mysql+pivot

    in alternativa, lasciati ispirare da questo esempio https://lnx.dicesare.com/sql/sql-com...-di-risultati/

  3. #3
    Grazie 1000, ho studiato pivot e sono riuscito a risolvere.
    Siccome vi sono delle tabelle linkate, affinchè i risultati dei totali fossero giusti ho dovuto usare gli inner
    mentre se uso left join mi somma valori in più.

    tabelle:
    - tesdoc = testate fatture
    - jana001 = dati anagrafici comuni
    - jana003 = dati anagrafici accessori (indirizzi sedi)
    - agenti
    - comuniistat = anagrafica comuni

    link:

    tesdoc -> jana001 -> jana003 -> comuniistat
    tesdoc -> agenti

    Questo il mio sql:

    SELECT tesdoc.tes_anclfo AS "Codice cliente",
    CONCAT(jana001.cognome_jana001," ",jana001.nome_jana001) AS "Ragione sociale",
    comuniistat.comune AS "Comune",
    jana003.cap_jana003 AS "CAP",
    jana003.telefono_jana003 AS "Telefono",
    jana003.cellulare_jana003 AS "Cellulare",
    jana003.e_mail_jana003 AS "e-mail",
    SUM(CASE WHEN tesdoc.tes_annodo = "1818" THEN 1 END) "N. Fatture 2018",
    ROUND(SUM(CASE WHEN tesdoc.tes_annodo = "1818" THEN tesdoc.tes_impbol END),2) "Fatturato 2018",
    SUM(CASE WHEN tesdoc.tes_annodo = "1919" THEN 1 END) "N. Fatture 2019",
    ROUND(SUM(CASE WHEN tesdoc.tes_annodo = "1919" THEN tesdoc.tes_impbol END),2) "Fatturato 2019",
    SUM(CASE WHEN tesdoc.tes_annodo = "2020" THEN 1 END) "N. Fatture 2020",
    ROUND(SUM(CASE WHEN tesdoc.tes_annodo = "2020" THEN tesdoc.tes_impbol END),2) "Fatturato 2020",
    SUM(CASE WHEN tesdoc.tes_annodo = "2121" THEN 1 END) "N. Fatture 2021",
    ROUND(SUM(CASE WHEN tesdoc.tes_annodo = "2121" THEN tesdoc.tes_impbol END),2) "Fatturato 2021",
    agenti.age_codzon AS "Zona"
    FROM tesdoc
    JOIN jana001 ON tesdoc.tes_anclfo = jana001.codmne_jana001
    JOIN jana003 ON tesdoc.tes_anclfo = jana003.codmne_jana003
    JOIN agenti ON tesdoc.tes_codage = agenti.age_codage
    JOIN comuniistat ON comuniistat.codicecomunecatastale = jana003.comune_jana003
    GROUP BY tesdoc.tes_anclfo
    ORDER BY tesdoc.tes_anclfo ASC;

    Se faccio "LEFT JOIN comuniistat ..." mi somma altri valori, come linkasse altri record.

  4. #4
    se con LEFT JOIN ti dà risultati diversi vuol dire che l'integrità referenziale tra le tabelle non è rispettata

Tag per questa discussione

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.