Esempio di raggruppamento di righe multiple ottenute a seguito di una inner join. Si hanno due tabelle, una relativa ad interventi di assistenza tecnica, ed un'altra relativa la visita del tecnico per la riparazione. Nel caso del primo intervento si hanno un totale di tre visite eseguite, di cui solo la terza è andata a buon fine. Le prime due sono state sospese ('S') perché non si è reso possibile il completamento dell'intervento per un qualche motivo. Quello che interessa estrarre è la data conclusiva dell'intervento, avvero quella con stato 'C' o, equivalentemente, con la data di esecuzione più alta.
DECLARE @Interventi TABLE (
idIntervento int
)
insert into @Interventi (idIntervento) values (1);
insert into @Interventi (idIntervento) values (2);
insert into @Interventi (idIntervento) values (3);
insert into @Interventi (idIntervento) values (4);
insert into @Interventi (idIntervento) values (5);
select * from @Interventi
DECLARE @Visite TABLE (
idVisita int,
idIntervento int,
stato nvarchar(1),
dataVisita datetime
)
insert into @Visite (idVisita, idIntervento, stato, dataVisita) values (1, 1, 'S', '2000-01-01');
insert into @Visite (idVisita, idIntervento, stato, dataVisita) values (2, 1, 'S', '2000-01-02');
insert into @Visite (idVisita, idIntervento, stato, dataVisita) values (3, 1, 'C', '2000-01-03');
select * from @Visite;
-- modo 1
select *
from @Interventi as I
inner join @Visite as V on I.idIntervento = V.idIntervento
where stato = 'C'
-- modo 2
select MAX(V.idVisita) as idVisita
from @Visite as V
inner join @Interventi as I on V.idIntervento = V.idIntervento
-- modo 3
select MAX(V.dataVisita) as dataVisita
from @Visite as V
inner join @Interventi as I on V.idIntervento = V.idIntervento
Nessun commento:
Posta un commento