
Originariamente inviata da
optime
spiega bene il problema, la struttura delle tabelle coinvolte e di come sono correlate da loro
La tabella di destinazioe delle update viene creata ad hoc e popolata in questo modo:
codice:
INSERT INTO CDG_ESTRAZ_ORE
select distinct
risultati.azienda CDC
,aziende.ragione_b DESCRIZIONE
,risultati.data DATA
,0 ORE_LAVORATE,0 ORE_ASS_IN_OUT
,0 ORE_FOR_IN_OUT
GETDATE() DATA_MODIFICA
from risultati
JOIN aziende
on risultati.azienda = aziende.azienda
where causale in(select causale from gruppi_causali_c where gruppo ='FPHL'and azienda ='0000000001')
and data between'2014-05-01'and'2014-05-31'
order by CDC,DATA
Le ore da prelevare (ORE_LAVORATE) sono archiviate nella tabella dei risultati per azienda,data e causale, perciò prelevo tutti i record con le causali facenti parti del gruppo ore lavorate.
codice:
update DBFOREW..CDG_ESTRAZ_ORE
set ORE_LAVORATE = (
SELECT SUM(ORE/3600.) ORE_LAVORATE
FROM erg_pedus..risultati risultati
JOIN DBFOREW..CDG_ESTRAZ_ORE
ON risultati.data= CDG_ESTRAZ_ORE.DATA and risultati.azienda = CDG_ESTRAZ_ORE.CDC
WHERE causale in(select causale from gruppi_causali_c where gruppo ='FPHL'and azienda ='0000000001')
and RISULTATI.data between'2014-05-01'and'2014-05-31'
groupby risultati.azienda,risultati.
data
)
La select funziona correttamente e genera esattamente il numero di record già presenti nella tabella CDG_ESTRAZ_ORE.
Il problema nasce nel momento in cui vado a fare l'update in quanto mi viene restituito l'errore:
Msg 512, Level 16, State 1, Line 1
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
The statement has been terminated