2 messaggi dal 05 dicembre 2007
Salve a tutti.. è il mio primo messaggio..

Avrei bisogno di fare una query in SQL apparentemene semplice..
non vorrei usare altre tabelle per occuparmi di doverle gestire..

Ho una tabella (tabella1) di seguito la struttura:
struttura

Ho caricato dei dati di esempio eccoli:
dati esempio

A me interessa raggruppare i dati per "ID_dip" (e quindi visualizzare anche il nome) e la somma delle ore, ecco l'esempio..
query1

E lo script della query in SQL..
script SQL

Ora io vorrei "fare un eccezione" cioè vorrei raggrupare 2 valori come se fossero 1 solo..
cioè danilo e daniele sono la stessa persona e nel raggruppamento devono essere identificati come daniele (anche se hanno dati diversi "nome" e "id_dip" devono riportare come raggruppamento anche lo stesso "id_dip" di daniele) quindi la mia query dovrebbe diventare così:
tabella con eccezione

Ora in SQL come posso scriverla?!?
mi date un aiuto?!
ciao e grazie mille
1.024 messaggi dal 19 dicembre 2003
Contributi | Blog
Tutto sta a capire perchè Danilo e Daniele debbano essere la stessa persona.
Qualunque sia la ragione devi passare per un campo calcolato che puoi valorizzare preventivamente (inserendo un campo calcolato oppure per mezzo di una vista o di una CTE) oppure nel corso del raggruppamento.
Se volessi farlo nella query di raggruppamento potresti scrivere

SELECT CASE Nome WHEN 'Danilo' THEN 'Daniele' ELSE Nome END, COUNT(*)
FROM dbo.MyTable
GROUP BY CASE Nome WHEN 'Danilo' THEN 'Daniele' ELSE Nome END

Se le eccezioni da gestire sono poche unità puoi procedere come sopra aggiungendo alla CASE una clausola WHEN per correggere tutte le anomalie, diversamente ti conviene bonificare i dati (ti converrebbe a prescindere) e/o utilizzare una tabella di mapping dove fare tutte le "associazioni" del caso.

La query di cui sopra la utilizzi poi come tabella derivata per metterla in join con la tabella dbo.MyTable da cui recuperare l'id relativo a ciascun Nome.

Bye
2 messaggi dal 05 dicembre 2007
si ok hai centrato in pieno..
Danilo e daniele sono la stessa persona..
ho semplificato il tutto ma in realtà la mia query è molto + complessa.. raccoglie dei dati per un rilevamento presenze..
e danilo e daniele (sono la descrizione della causale)
e id_dip sono le chiavi delle causali..
le causali sono le stesse..
ma danilo è dato in automatico e daniele e dato in manuale dagli utenti..
non chiedetemi perchè è così..
non posso rettificare i dati (UPDATE)
1. la tabella è soggetta a modifiche (editing)
2. per altri casi servono le distinsioni (per l'editing - concesso solo per le operazioni manuali)..

CONCLUDENDO i campi sono fissi.. (cioè nn sono dei parametri variabili ma vanno proprio nella query così come sono) e sono solo questi 2 (4 2+2 nome e id)
ho provato in access2003 a fare una cosa del genere ma non funziona..

SELECT
id,
CASE Nome WHEN "Danilo" THEN "Daniele" ELSE Nome END,
data,
ore,
CASE id_dip WHEN 3 THEN 4 ELSE id_dip END,

FROM tabella1;
Modificato da dante.3d il 05 dicembre 2007 13.01 -
Modificato da dante.3d il 05 dicembre 2007 13.05 -
1.024 messaggi dal 19 dicembre 2003
Contributi | Blog

ho provato in access2003 a fare una cosa del genere ma non funziona


Ovvio, perchè ACCESS non ha il costrutto CASE. Se l'avessi detto prima... :-)
In Access puoi utilizzare l'istruzione IIF

Bye

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.