eccomi scusate, credevo di aver risolto e invece stamattina il problema si è ripresentato... 1:14 mins di esecuzione per tirarmi fuori 100 record (e dovrei anche togliere il top 100 quando riesco a farla andare)
la stored è la seguente (non inorridite):
codice:
SELECT top 100
tbl_fg_temp.giorno,
tbl_fg_temp.tipo,
(tbl_mezzi.matricola + ' - ' + tbl_mezzi.descrizione + ' ' + tbl_mezzi.targa) as descrmezzo,
(convert(varchar(10),tbl_personale.matricola) + ' - ' + tbl_personale.cognome + ' ' + tbl_personale.nome) as descrautista,
descrjob = Case tbl_fg_temp.tipo
WHEN 'T' THEN
tbl_turni_teste.codice + ' - ' + tbl_turni_teste.descrizione
ELSE
'Lav.n.' + convert(varchar(10),tbl_lavori_teste.ID ) + ' - ' + tbl_lavori_teste.descr_fatt
END ,
tbl_chiusure.ID as IDchiusura,
IDjob = Case tbl_fg_temp.tipo
WHEN 'T' THEN
tbl_turni_teste.ID
ELSE
tbl_lavori_teste.ID
END ,
convert(varchar(10), tbl_fg_temp.giorno) + '§§§'+ tbl_fg_temp.tipo + '§§§'+ Case tbl_fg_temp.tipo
WHEN 'T' THEN
convert(varchar(10), tbl_turni_teste.ID)
ELSE
convert(varchar(10), tbl_lavori_teste.ID)
END + '§§§' + CONVERT(varchar(10),tbl_fg_temp.IDmezzo) + '§§§' + CONVERT(varchar(10),tbl_fg_temp.IDautista) as alldata
FROM tbl_fg_temp
left join tbl_personale ON tbl_fg_temp.IDautista = tbl_personale.ID
left join tbl_mezzi ON tbl_fg_temp.IDmezzo = tbl_mezzi.ID
left join tbl_prev_righe ON tbl_fg_temp.tipo='L' AND tbl_fg_temp.IDriga = tbl_prev_righe.ID
left join tbl_lavori_teste ON tbl_prev_righe.IDtesta = tbl_lavori_teste.ID
left join tbl_turni_righe ON tbl_fg_temp.tipo='T' AND tbl_fg_temp.IDriga = tbl_turni_righe.ID
left join tbl_turni_teste ON tbl_turni_righe.IDtesta = tbl_turni_teste.ID
left join tbl_clienti ON
(tbl_fg_temp.tipo='T' and tbl_turni_teste.ID = tbl_clienti.ID) OR (tbl_fg_temp.tipo <> 'T' and tbl_lavori_teste.IDcliente = tbl_clienti.ID )
left join tbl_chiusure on
(tbl_fg_temp.tipo='T' AND tbl_chiusure.idjob = tbl_turni_teste.ID AND tbl_fg_temp.giorno = tbl_chiusure.giorno AND tbl_fg_temp.IDautista = tbl_chiusure.IDautista AND tbl_fg_temp.IDmezzo = tbl_chiusure.IDmezzo) OR (tbl_fg_temp.tipo <> 'T' AND tbl_chiusure.idjob = tbl_lavori_teste.ID AND tbl_fg_temp.giorno = tbl_chiusure.giorno AND tbl_fg_temp.IDautista = tbl_chiusure.IDautista AND tbl_fg_temp.IDmezzo = tbl_chiusure.IDmezzo)
WHERE tbl_fg_temp.ditta = @ditta
AND tbl_fg_temp.sede = @sede
AND tbl_chiusure.ID is null
AND tbl_fg_temp.tipoaut='A'
AND tbl_fg_temp.giorno >= @datada
AND tbl_fg_temp.giorno < @dataa
AND ((tbl_fg_temp.tipo='L' AND tbl_lavori_teste.dataarrivo < @dataa) OR tbl_fg_temp.tipo='T')
GROUP BY tbl_fg_temp.giorno,
tbl_fg_temp.tipo,
(tbl_mezzi.matricola + ' - ' + tbl_mezzi.descrizione + ' ' + tbl_mezzi.targa),
(convert(varchar(10),tbl_personale.matricola) + ' - ' + tbl_personale.cognome + ' ' + tbl_personale.nome),
Case tbl_fg_temp.tipo
WHEN 'T' THEN
tbl_turni_teste.codice + ' - ' + tbl_turni_teste.descrizione
ELSE
'Lav.n.' + convert(varchar(10),tbl_lavori_teste.ID ) + ' - ' + tbl_lavori_teste.descr_fatt
END ,
tbl_chiusure.ID,
Case tbl_fg_temp.tipo
WHEN 'T' THEN
tbl_turni_teste.ID
ELSE
tbl_lavori_teste.ID
END,
convert(varchar(10), tbl_fg_temp.giorno) + '§§§'+ tbl_fg_temp.tipo + '§§§'+ Case tbl_fg_temp.tipo
WHEN 'T' THEN
convert(varchar(10), tbl_turni_teste.ID)
ELSE
convert(varchar(10), tbl_lavori_teste.ID)
END + '§§§' + CONVERT(varchar(10),tbl_fg_temp.IDmezzo) + '§§§' + CONVERT(varchar(10),tbl_fg_temp.IDautista)
ORDER BY giorno, tipo, descrjob, descrautista, descrmezzo, alldata desc
non saprei nemmeno come disegnarvi un grafico del db ma vi darò le info che mi chiederete sulla struttura delle tabelle.
grazie per la pazienza