L'amico Itzik ama sempre ripeterlo: "SQL is Pure Logic". Ovviamente non sbaglia :-)
Una buona dimonstrazione è visibile sul forum di UGISS a questo indirizzo:
http://community.ugiss.org/forums/t/927.aspx
Il problema può sembrare complesso e richiedere necessariamente una risoluzione row-by-row. In pratica decidendo di procedere row-by-row ci accontentiamo di un "Brute Force Attack". Se per un attimo però spegnamo il computer e disegnamo su un foglio gli insiemi di dati con cui abbiamo a che fare e le regole che di dobbiamo applicare sopra possiamo scoprire che un algortimo risolutivo esiste. In realtà il più delle volte esiste e lo sappiamo già in quanto insito nelle regole di business che ci vengono date dal commitente o dall'analisi funzionale, però sembra difficile applicarle in pratica.
Dobbiamo ricordarci che il modello relazionale è stato pensato apposta per poter applicare gli algortimi logici necessari per applicare certe regole di business in modo dichiarativo, quindi è sicuramente possibile (nel 99% dei casi) evitare un'approcio row-by-row ed applicare l'algortimo cosi come lo abbiamo definito nella nostra mente.
Quindi tenete sempre presente che SQL è PURA LOGICA e come tale una volta che avete trovato l'algortimo che vi risolve i problemi...dove solo applicarlo.
Non fermativi a valutare soltanto la soluzione apparentemente più semplice ma meno performante in assoluto, ossia l'approcio row-by-row con cicli o cursori!