metes la consulta de donde sacas los valores en un subquery en el ejemplo t1 y dentro de este subquery puedes poner un case para lo que necesitas:
Para que se entienda mejor
Código SQL:
Ver originalCREATE TABLE #temp
(
nombre VARCHAR(10),
date1 datetime,
date2 datetime,
STATUS bit
)
INSERT INTO #temp VALUES ('libras',getdate(),getdate()-1,1)
INSERT INTO #temp VALUES ('libras1',getdate(),getdate()-2,0)
INSERT INTO #temp VALUES ('libras2',getdate(),getdate()-3,0)
INSERT INTO #temp VALUES ('libras3',getdate(),getdate()-4,1)
INSERT INTO #temp VALUES ('libras4',getdate(),getdate()-5,1)
SELECT * FROM #temp
nombre date1 date2 STATUS
libras 2012-04-18 10:59:01.860 2012-04-17 10:59:01.860 1
libras1 2012-04-18 10:59:01.860 2012-04-16 10:59:01.860 0
libras2 2012-04-18 10:59:01.860 2012-04-15 10:59:01.860 0
libras3 2012-04-18 10:59:01.860 2012-04-14 10:59:01.860 1
libras4 2012-04-18 10:59:01.860 2012-04-13 10:59:01.860 1
UPDATE #temp
SET date1=t1.fecha
FROM
(
SELECT CASE WHEN STATUS=1 THEN date2 ELSE date1 END AS fecha,nombre,STATUS FROM #temp
) AS t1 WHERE t1.nombre=#temp.nombre
SELECT * FROM #temp
nombre date1 date2 STATUS
libras 2012-04-17 10:59:01.860 2012-04-17 10:59:01.860 1
libras1 2012-04-18 10:59:01.860 2012-04-16 10:59:01.860 0
libras2 2012-04-18 10:59:01.860 2012-04-15 10:59:01.860 0
libras3 2012-04-14 10:59:01.860 2012-04-14 10:59:01.860 1
libras4 2012-04-13 10:59:01.860 2012-04-13 10:59:01.860 1
Si te fijas nada cambio la fecha date1 por la fecha date2 solo en los campos en donde status=1 que es mas o menos lo que necesitas no??
Saludos!