SQL Server - Lic

 
Vista:

Lic

Publicado por Salvador (5 intervenciones) el 14/02/2008 21:44:55
Hola a Todos, estoy tratando de hacer una actualizacion a una tabla de clientes que perdio una fecha, esta fecha puede ser recostruida en base al detalle de los pedidos de los clientes, les pongo la consulta que me consigue la fecha que requeire para cada cliente.

SELECT DISTINCT CLIENTES.CliCod AS Cliente, MIN(CABEZAL.CabFecha) AS PrimerPed

FROM CLIENTES INNER JOIN
CABEZAL ON CLIENTES.CliCod = CABEZAL.CliCod INNER JOIN
LINEAS ON CABEZAL.CabID = LINEAS.CabID

WHERE (CABEZAL.CabBasico <= 2) AND (CABEZAL.EmpCod = 1) AND (CABEZAL.CabAnulado = 0) AND (LINEAS.ArtCodLin = 'VIP') AND (LINEAS.LinAnulada = 0)
AND (CABEZAL.CabFecha <= '31/12/2006')

GROUP BY CLIENTES.CliCod
ORDER BY Cliente

Esto funciona precioso y me entrega una lista asi:

Cliente PrimerPed
105 07/07/2004
123 22/11/2004
168 11/05/2005
176 17/06/2004

Ahora la pregunta es: existe alguna forma de actualizar la fecha que estoy determinando en la tabla de clientes sin pasar por una tabla temporal ?, es decir con un Update usando el Set, pero no se como acomdar la consulta para que lo haga.

Agradezo de antemano cualquier aportación.

Pd. Estoy usando SQL 2000 server

Saludos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Lic

Publicado por Isaias (3308 intervenciones) el 15/02/2008 00:43:54
UPDATE CLIENTE SET FECHA = x.PrimerPed
FROM CLIENTE cte JOIN (
SELECT DISTINCT CLIENTES.CliCod AS Cliente, MIN(CABEZAL.CabFecha) AS PrimerPed
FROM CLIENTES INNER JOIN
CABEZAL ON CLIENTES.CliCod = CABEZAL.CliCod INNER JOIN
LINEAS ON CABEZAL.CabID = LINEAS.CabID
WHERE (CABEZAL.CabBasico <= 2) AND (CABEZAL.EmpCod = 1) AND (CABEZAL.CabAnulado = 0) AND (LINEAS.ArtCodLin = 'VIP') AND (LINEAS.LinAnulada = 0)
AND (CABEZAL.CabFecha <= '31/12/2006')
GROUP BY CLIENTES.CliCod
ORDER BY Cliente) as x
ON CLIENTE.ID = x.CliCod
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Lic

Publicado por Salvador (5 intervenciones) el 15/02/2008 17:24:35
Isaias, gracias por responder.

Te comento que modifique la consulta como me lo propones, pero recibo el siguiente error:

La Cláusula ORDER BY no es válida en vistas,funciones en línea,tablas derivadas ni subconsultas,salvo que se especifique tabién TOP.

La consulta la modifique de esta forma :

UPDATE CLIENTES
SET CLIENTES.CliVipFch = CABEZAL.CabFecha
FROM CLIENTES JOIN (SELECT DISTINCT CLIENTES.CliCod AS Cliente, MIN(CABEZAL.CabFecha) AS PrimerPed

FROM CLIENTES INNER JOIN
CABEZAL ON CLIENTES.CliCod = CABEZAL.CliCod INNER JOIN LINEAS ON CABEZAL.CabID = LINEAS.CabID
WHERE (CABEZAL.CabBasico <= 2) AND (CABEZAL.EmpCod = 1) AND (CABEZAL.CabAnulado = 0) AND (LINEAS.ArtCodLin = 'VIP') AND
(LINEAS.LinAnulada = 0) AND (CABEZAL.CabFecha <= '31/12/2006')
GROUP BY CLIENTES.CliCod
ORDER BY CLIENTES.CliCod) AS Cliente ON CLIENTES.Clicod = CABEZAL.CliCod
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Lic

Publicado por Salvador (5 intervenciones) el 15/02/2008 17:24:36
Isaias, gracias por responder.

Te comento que modifique la consulta como me lo propones, pero recibo el siguiente error:

La Cláusula ORDER BY no es válida en vistas,funciones en línea,tablas derivadas ni subconsultas,salvo que se especifique tabién TOP.

La consulta la modifique de esta forma :

UPDATE CLIENTES
SET CLIENTES.CliVipFch = CABEZAL.CabFecha
FROM CLIENTES JOIN (SELECT DISTINCT CLIENTES.CliCod AS Cliente, MIN(CABEZAL.CabFecha) AS PrimerPed

FROM CLIENTES INNER JOIN
CABEZAL ON CLIENTES.CliCod = CABEZAL.CliCod INNER JOIN LINEAS ON CABEZAL.CabID = LINEAS.CabID
WHERE (CABEZAL.CabBasico <= 2) AND (CABEZAL.EmpCod = 1) AND (CABEZAL.CabAnulado = 0) AND (LINEAS.ArtCodLin = 'VIP') AND
(LINEAS.LinAnulada = 0) AND (CABEZAL.CabFecha <= '31/12/2006')
GROUP BY CLIENTES.CliCod
ORDER BY CLIENTES.CliCod) AS Cliente ON CLIENTES.Clicod = CABEZAL.CliCod
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Lic

Publicado por Isaias (3308 intervenciones) el 15/02/2008 17:46:24
La solucion, quitale el ORDER BY, ya no lo necesitas
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Lic

Publicado por Salvador (5 intervenciones) el 15/02/2008 20:10:58
Fijate que al ejecutarlo me indica que tengo un error de Sintaxis cerca de Clicod ??,

Será un parentesis ?

Es que lo estoy haciendo pero creo que no estoy comprendiendo la logica, la linea 1 a 3 claras, Es el segundo Form que me tiene confundido.

UPDATE CLIENTES
SET CLIENTES.CliVipFch = CABEZAL.CabFecha
FROM CLIENTES JOIN
(SELECT DISTINCT CLIENTES.CliCod AS Cliente, MIN( CABEZAL.CabFecha) AS PrimerPed

FROM CLIENTES INNER JOIN
CABEZAL ON CLIENTES.CliCod = CABEZAL.CliCod INNER JOIN
LINEAS ON CABEZAL.CabID = LINEAS.CabID

WHERE (CABEZAL.CabBasico <= 2) AND (CABEZAL.EmpCod = 1) AND (CABEZAL.CabAnulado = 0) AND (LINEAS.ArtCodLin = 'VIP') AND
(LINEAS.LinAnulada = 0) AND (CABEZAL.CabFecha <= '31/12/2006')

GROUP BY CLIENTES.CliCod
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Lic

Publicado por Isaias (3308 intervenciones) el 16/02/2008 01:24:47
UPDATE CLIENTES
SET CLIENTES.CliVipFch = x.CabFecha
FROM CLIENTES JOIN
(SELECT DISTINCT CLIENTES.CliCod AS Cliente, MIN( CABEZAL.CabFecha) AS PrimerPed
FROM CLIENTES INNER JOIN
CABEZAL ON CLIENTES.CliCod = CABEZAL.CliCod INNER JOIN
LINEAS ON CABEZAL.CabID = LINEAS.CabID
WHERE (CABEZAL.CabBasico <= 2) AND (CABEZAL.EmpCod = 1) AND (CABEZAL.CabAnulado = 0) AND (LINEAS.ArtCodLin = 'VIP') AND
(LINEAS.LinAnulada = 0) AND (CABEZAL.CabFecha <= '31/12/2006')) as X
ON CLIENTES.CliCod = x.CliCod
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE: Duda usando Update

Publicado por Salvador (5 intervenciones) el 15/02/2008 17:28:25
Isaias, muchas gracias por responder.

Te comento que modifiqué la consulta como me lo propones pero recibo el siguiente error:

La Cláusula ORDER BY no es válida en vistas,funciones en línea,tablas derivadas ni subconsultas,salvo que se especifique tabién TOP.

La consulta la modifique de esta forma :

UPDATE CLIENTES
SET CLIENTES.CliVipFch = CABEZAL.CabFecha
FROM CLIENTES JOIN (SELECT DISTINCT CLIENTES.CliCod AS Cliente, MIN(CABEZAL.CabFecha) AS PrimerPed

FROM CLIENTES INNER JOIN CABEZAL ON CLIENTES.CliCod = CABEZAL.CliCod
INNER JOIN LINEAS ON CABEZAL.CabID = LINEAS.CabID

WHERE (CABEZAL.CabBasico <= 2) AND (CABEZAL.EmpCod = 1) AND (CABEZAL.CabAnulado = 0) AND (LINEAS.ArtCodLin = 'VIP') AND (LINEAS.LinAnulada = 0) AND (CABEZAL.CabFecha <= '31/12/2006')

GROUP BY CLIENTES.CliCod
ORDER BY CLIENTES.CliCod) AS Cliente ON CLIENTES.Clicod =CABEZAL.CliCod
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar