DECLARE @g int
SET @g = (SELECT ec_totalg FROM t_ec WHERE ec_t_id = 1)
retunerar ex 16
Select 2
SELECT tri_g FROM t_gt WHERE t_gt.tri_t_id = 1
retunerar ex
tri_g
------
2
7
0
10
3
0
5
Vad jag nu vill göra är att gå igenom värderna i tri_g för att se om de är mindre än summan från select 1 om inte då skall värdet sättas till 0.
Ex.
2 är mindre än 16
2+7 är mindre än 16
2+7+0 är mindre än 16
2+7+0+10 är större än 16 (gå in i tri_g och sätt 10 till 0)
2+7+0+(0)+3 är mindre än 16
2+7+0+(0)+3+0 är mindre än 16
2+7+0+(0)+3+5 är större än 16 (gå in i tri_g och sätt 5 till 0)
Jag tycker att hela upplägget verkar skumt. Eftersom du inte har någon order by så vet du aldrig i vilken ordning posterna kommer och då lägger du in ett beroende att posterna uppdateras, inte enbart beroeende på vilka värden de har, utan på vilken innebördes ordning de returneras i.
SELECT tri_g FROM t_gt WHERE t_gt.tri_t_id = 1 ORDER BY t_id ASC
Det jag hade tänkt göra är att innan jag kör själva huvud SELECTen som skall ta ut datan från t_gt till sidan. Så skall jag först kolla och uppdatera värderna i tri_g om de är större än värdet från select1 i mitt första inlägg, se ex även det i första inlägget. För värderna i respektive tabell kan uppdateras oberoende av varandra och därför vill jag köra denna kontrollen innan. Lite tydligare hoppas jag. ;)
while (( select sum(tri_g) from t_gt where tri_g > 0 ) > 16)
update t_gt
set tri_g = 0
where id = (select min(id) from t_gt
where tri_g = (select max(tri_g) from t_gt
where tri_t_id = 1)
and tri_t_id = 1)
Det går att använda en cursor också. Du bör ha ett index på tri_g (beror iofs på hur mycket data du har.