Buongiorno.
Ciao a tutti sono nuovo del forum.
Vorrei creare un risultato in cui, in maniera aggregata, per ogni articolo riporta l'ABC ovvero il numero di occorrenze in cui la produttività è stata maggiore o compresa tra certe percentuali.
Ho provato a creare una tabella temporanea per aggregare i dati al volo ed estrarre i risultati. Tuttavia quello che mi servirebbe davvero sarebbe farlo 2 volte ma temo che la clausola WITH possa essere usata soltanto una volta e quindi non possa essere ANNIDATA.
Qualcuno mi sa dire se sbaglio formalmente la query oppure SQL non lo permetta? (della select finale ho indicato solo uno stralcio).
Pensavo che fosse possibile farlo anche con un solo passaggio ma purtroppo in questo modo i risultati vengono moltiplicati e non aggregati (spero di essermi spiegato)
Grazie
WITH TAB AS (
WITH TABELLA AS (
select
codparte AS 'ART',
desparte AS 'DEX',
s_odl.datainizio AS 'DATA',
s_odl.turno AS 'T',
sum(s_odl.lordo) AS 'QTA',
round(sum(s_odl.durata)/3600,2) AS 'ORE',
round(sum(s_odl.lordo)/(sum(s_odl.durata)/3600),0) AS 'PZH',
round(3600/avg(tcicmedstd),0) AS 'STD'
from l_odl
left outer join s_odl on
l_odl.cododl = s_odl.cododl and
durata > 0 and
s_odl.statocdl not in (8,27,29,4)
where
l_odl.codcdl='C03' and
dtinieff>=getdate()-360
group by
codparte,
desparte,
3600/tcicmedstd,
s_odl.datainizio,
s_odl.turno)
SELECT
ISNULL(ART, 'TOT') AS 'ARTICOLO',
COUNT(CASE WHEN PZH > STD*0.95 THEN 1 END) AS P95,
COUNT(CASE WHEN PZH BETWEEN (STD*0.75) AND (STD*0.95) THEN 1 END) AS P75,
COUNT(CASE WHEN PZH BETWEEN (STD*0.50) AND (STD*0.75) THEN 1 END) AS P50,
COUNT(CASE WHEN PZH < STD*0.50 THEN 1 END) AS P00
FROM TABELLA
GROUP BY
ART WITH ROLLUP)
SELECT
ARTICOLO,
(SELECT DEX FROM TABELLA WHERE ART=ARTICOLO) AS 'DESCRIZIONE', [...]
FROM TAB