Visualizzazione dei risultati da 1 a 8 su 8

Discussione: Query pesantissima

  1. #1

    Query pesantissima

    Salve,
    ho un problema con un db di un cliente, purtroppo non posso modificarlo perchè è il risultato di un'esportazione di AS400.
    Il db è SQL Server 2005.
    ho una tabella con questi campi:

    codice_utente
    riga
    etichetta
    valore

    In pratica per "descrivere" un utente la tabella genera 32 record, ad esempio

    1 / 0 / fatturato / 1000
    1 / 1 / budget / 2500
    1 / 2 / spese / 500
    ...

    In pratica è esageratamente pesante lavorare con una query, per cui volevo realizzare una vista che mi mostrasse i dati già ordinati in modo che ogni riga rappresentasse un utente:

    SELECT
    (SELECT valore
    FROM tabella AS tabella_1
    WHERE tabella_1.riga = 0 AND tabella_1.codice_utente = tabella.codice)
    AS Fatturato,
    (SELECT valore
    FROM tabella AS tabella_2
    WHERE tabella_2.riga = 1 AND tabella_2.codice_utente = tabella.codice)
    AS Budget,
    (SELECT valore
    FROM tabella AS tabella_3
    WHERE tabella_3.riga = 0 AND tabella_3.codice_utente = tabella.codice)
    AS Spese,
    ...
    FROM tabella WHERE tabella.codice_utente = 1

    Esiste modo più snello? Non tanto per l'eleganza del codice, quanto per le performance della query che è decisamente lenta?
    Grazie mille.
    Enrico Frison
    El signore ghe da e suche a chi che no ga i porsei!

  2. #2
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    select a.codice_utente, a.valore as fatturato, b.valore as budget, c.valore as spese
    from tabella a, tabella b, tabella c
    where a.codice_utente = 1
    and a.codice_utente = b.codice_utente
    and c.codice_utente = a.codice_utente
    and a.riga = 0
    and b.riga = 1
    and c.riga = 2

    purche' le linee relative ad un utente esistano sempre tutte e tre, altrimenti occorre creare la query con la left join

    ciao
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  3. #3
    se tu hai

    cliente - tipo - importo
    a - 1 - 100
    a - 2 - 150
    b - 1 - 300
    b - 2 - 350


    e vuoi ottenere

    cliente - importotipo1 - importotipo2 ecc
    a - 100 - 150
    b - 300 - 350

    la soluzione è fare una query pivot


  4. #4
    Originariamente inviato da optime
    se tu hai

    cliente - tipo - importo
    a - 1 - 100
    a - 2 - 150
    b - 1 - 300
    b - 2 - 350


    e vuoi ottenere

    cliente - importotipo1 - importotipo2 ecc
    a - 100 - 150
    b - 300 - 350

    la soluzione è fare una query pivot

    Interessante... ma non so cosa sia una query pivot :master:
    Senza romperti troppo le scatole, sai dirmi dove posso trovare una spiegazione su cosa sia e come usarla?
    Grazie mille.
    Enrico Frison
    El signore ghe da e suche a chi che no ga i porsei!

  5. #5
    Originariamente inviato da br1
    select a.codice_utente, a.valore as fatturato, b.valore as budget, c.valore as spese
    from tabella a, tabella b, tabella c
    where a.codice_utente = 1
    and a.codice_utente = b.codice_utente
    and c.codice_utente = a.codice_utente
    and a.riga = 0
    and b.riga = 1
    and c.riga = 2

    purche' le linee relative ad un utente esistano sempre tutte e tre, altrimenti occorre creare la query con la left join

    ciao
    La soluzione funziona, ma in termini di velocità non sono riuscito ad apprezzare miglioramenti. Grazie cmq.
    Ciao
    Enrico Frison
    El signore ghe da e suche a chi che no ga i porsei!

  6. #6
    Originariamente inviato da freezone
    Interessante... ma non so cosa sia una query pivot :master:
    Senza romperti troppo le scatole, sai dirmi dove posso trovare una spiegazione su cosa sia e come usarla?
    Grazie mille.
    http://lmgtfy.com/?q=sql%202005%20pivot

  7. #7
    Originariamente inviato da optime
    http://lmgtfy.com/?q=sql%202005%20pivot
    ahahahah stupendo questo link.. sei troppo nerd alle volte !
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  8. #8
    Enrico Frison
    El signore ghe da e suche a chi che no ga i porsei!

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 © 2026 vBulletin Solutions, Inc. All rights reserved.