Visualizzazione dei risultati da 1 a 5 su 5

Discussione: [Sql Server 2005]Pivot

  1. #1

    [Sql Server 2005]Pivot

    Ciao a tutti

    Ho delle difficoltà a realizzare un pivot fra diverse tabelle che hanno delle relazioni fra di loro, in particolare:

    codice:
    tabellaLavori
    
    id_job PK
    employeeID (fk on id_employee(pk) -> anagEmployees)
    customerID (fk on id_customer(pk) -> anagCustomers)
    serviceID (fk on id_service(pk) -> anagServices)
    date datetime
    total decimal
    In questa tabella vengono semplicemente memorizzati i lavori eseguiti da un dipendente presso un cantiere ed il relativo servizio, la data del lavoro ed il totale delle ore.

    Ora, io avrei necessità di sviluppare questa tabella "in orizzontale" facendo in modo che, dato un mese di lavoro (per esempio: anno 2010, mese ottobre)
    le colonne ottenute siano i giorni contenuti nel mese, sia se ci sono state lavorazioni, sia che non.

    un esempio potrebbe essere:

    codice:
    //recuperando le varie descrizioni facendo il join sulle tabelle di sopra:
    
    cantiere - servizio - 01/10/2010 - 02/10/2010 - 03/10-2010 - etc..
    pippo       riparazione        3          null (o zero)        8           etc...
    pluto        installazione      0          8                         5          etc..
    Ho a disposizione anche una tabella di tipo "Calendario" formata da un unico campo, date, di tipo datetime che è anche pk.

    Mi dareste una mano ?

    Grazie mille

    RaouL.

  2. #2

  3. #3
    Ciao

    Innanzitutto grazie per il suggerimento.

    Il problema però mi resta perchè in questi giorni ho trovato molti esempi simili.

    Nel mio caso però, significherebbe mettere mano a query molto hard coded.

    Questo perchè dovrei fare per ciascun mese dell'anno e i relativi giorni, una "tabella" apposita. In sostanza, i dati da trattare che provengono dal run time lato applicazione, non credo di poterli gestire al meglio.


    Pensavo più che altro, a questo punto, ad un right outer join ma ho anche qui dei problemi:

    codice:
    SELECT t1.denominazione AS Customer,
    t2.descrizione AS Service,
    t3.employeeID, t3.total, t4.date
    
    FROM
    TblJobs t3
    JOIN anagCustomer t1 ON t1.id_customer = t3.customerID
    JOIN anagServices t2 ON t2.id_service = t3.serviceID
    RIGHT OUTER JOIN calendarTable t4 ON t4.date = t3.date
    Su questa potrei fare poi un'operazione di traslazione da righe in colonne mediante un qualsiasi tool.

    Però, tanto per non mancare... mi dà un altro problema:

    Se scelgo solo un intervallo di date, ottengo i dati in maniera corretta sia se 'total' è valorizzato che non.

    Se scelgo di filtrare anche in base all id dell'employee, tutto va a farsi benedire perchè ovviamente mi da solo i giorni dove sono presenti i lavori per quell'id.

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2001
    Messaggi
    363
    Allora prova a lavorare sui due insiemi in questo modo:
    - [Query 1] => [Calendario] Left Outer Join [altre tabelle]
    UNION
    - [Query 2] => [Calendario] MINUS [Query 1]

  5. #5
    Ciao

    Ho provato anche nel modo da te suggerito (tranne la parola chiave che
    in sql server, anzichè essere MINUS è EXCEPT) ma non ne vengo a capo lo stesso, nel senso che ottengo gli stessi risultati

    mi sento così incapace...

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