Temat: Optymalizacja zapytania
całe zło powoduje ten TOP 1 :/
dalej mam kolejny problem...
po poprawieniu nazewnictwa zmiennych kod wygląda następująco:
aktualizuję tylko część wartości dla próby
update #PAKOWANIE
set
fundusz_czasu_pracy = isNull(pomCzas.CZAS_PRACY,0),
rzeczywisty_czas_pracy_mas = isNull(pomCzas.CZAS_PRACY,0)-suma_przes,
dostepnosc = case
when isNull(pomCzas.CZAS_PRACY,0)=0 then 0
else
(isNull(pomCzas.CZAS_PRACY,0) - suma_przes / isNull(pomCzas.CZAS_PRACY,0)) * 100
end,
-- reszte sobie wyliczysz :) analogicznie jak powyzsze - tylko do wzoru wystarczy podstawic, wartosci masz wyciagniete.
suma_przes = isNull(pomSum.AWARIA,0)+
isNull(pomSum.PRZEKLADKA,0)+
isNull(pomSum.WYMIANA,0)+
isNull(pomSum.BRAKM,0)+
isNull(pomSum.BRAKP,0)+
isNull(pomSum.BRAKZ,0)+
isNull(pomSum.KONIECZ,0)+
isNull(pomSum.REGULACJA,0)+
isNull(pomSum.SPRZATANIE,0)+
isNull(pomSum.BRAKMECH,0)+
isNull(pomSum.PROBZEL,0)+
isNull(pomSum.ZLAJAK,0)+
isNull(pomSum.OCZEK,0)+
isNull(pomSum.kodowanie,0),
pprzest = case
when fundusz_czasu_pracy=0 then 0
else
(suma_przes / fundusz_czasu_pracy) * 100
end,
produkcja = isNull(pomProdukcja.PRODUKCJA,0)
from(
select *
from #PAKOWANIE ppk
--liczymy sumy pomocnicze
left join (
select
ppk2.NR_ARK,
sum(case when mr_rodz = 'A' then MR_CZASPR else 0 end ) as AWARIA,
sum(case when mr_rodz = 'P' then MR_CZASPR else 0 end ) as PRZEKLADKA,
sum(case when mr_rodz = 'W' then MR_CZASPR else 0 end ) as WYMIANA,
sum(case when mr_rodz = 'M' then MR_CZASPR else 0 end ) as BRAKM,
sum(case when mr_rodz = 'L' then MR_CZASPR else 0 end ) as BRAKP,
sum(case when mr_rodz = 'Z' then MR_CZASPR else 0 end ) as BRAKZ,
sum(case when mr_rodz = 'K' then MR_CZASPR else 0 end ) as KONIECZ,
sum(case when mr_rodz = 'R' then MR_CZASPR else 0 end ) as REGULACJA,
sum(case when mr_rodz = 'S' then MR_CZASPR else 0 end ) as SPRZATANIE,
sum(case when mr_rodz = 'H' then MR_CZASPR else 0 end ) as BRAKMECH,
sum(case when mr_rodz = 'E' then MR_CZASPR else 0 end ) as PROBZEL,
sum(case when mr_rodz = 'O' then MR_CZASPR else 0 end ) as OCZEK,
sum(case when mr_rodz = 'X' then MR_CZASPR else 0 end ) as ZLAJAK,
sum(case when mr_rodz = 'D' then MR_CZASPR else 0 end ) as kodowanie,
sum(case when mr_rodz = 'I' then MR_CZASPR else 0 end ) as PMISTRZ,
sum(case when mr_rodz = 'F' then MR_CZASPR else 0 end ) as SNIADANIE
from #PAKOWANIE ppk2
inner join PR_EPMR epmr on (epmr.MR_SMBMASZ like 'N%' or epmr.MR_SMBMASZ like 'S%') and
(epmr.mr_nr = ppk2.NR_ARK and MR_CZASPR IS NOT NULL) group by ppk2.NR_ARK
) as pomSum on pomSum.NR_ARK=ppk.NR_ARK
--liczymy czas pracy
left join (
select ppk2.NR_ARK, ppk2.DATA,max(MS_CZASPR) as CZAS_PRACY
from #PAKOWANIE ppk2
inner join PR_EPMS epms on (epms.MS_NR = ppk2.NR_ARK and epms.MS_DATA = ppk2.DATA and epms.MS_SMBMASZ = ppk2.mas1)
where epms.MS_CZASPR IS NOT NULL
group by ppk2.NR_ARK, ppk2.DATA
) as pomCzas on (pomCzas.NR_ARK=ppk.NR_ARK)and(pomCzas.DATA=ppk.DATA)
--liczymy odpady
left join (
select ppk2.NR_ARK, ppk2.DATA,sum(MW_ILOSCB) as ODPADY
from #PAKOWANIE ppk2
inner join PR_EPMW epmw on epmw.MW_NR = ppk2.NR_ARK and epmw.MW_DATA = ppk2.DATA
where epmw.MW_RODZ = '1' and epmw.MW_ILOSCB IS NOT NULL
group by ppk2.NR_ARK, ppk2.DATA
) as pomOdpady on (pomOdpady.NR_ARK=ppk.NR_ARK)and(pomOdpady.DATA=ppk.DATA)
left join (
select ppk2.NR_ARK, ppk2.DATA,sum(MW_ILOSC) as PRODUKCJA
from #PAKOWANIE ppk2
inner join PR_EPMW epmw on epmw.MW_NR = ppk2.NR_ARK and epmw.MW_DATA = ppk2.DATA
where epmw.MW_RODZ = '1' and epmw.MW_ILOSC IS NOT NULL
group by ppk2.NR_ARK, ppk2.DATA
) as pomProdukcja on (pomProdukcja.NR_ARK=ppk.NR_ARK)and(pomProdukcja.DATA=ppk.DATA)
) as pomUpd
where pomUpd.NR_ARK=#PAKOWANIE.NR_ARK
po uruchomieniu dostaję błąd:
The column 'NR_ARK' was specified multiple times for 'pomUpd'.
cos jest nie tak do końca...
były nazwy MS_NR ale w #PAKOWANIE jest NR_ARK itp...