Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

problema con consulta de actualizacion.

Estas en el tema de problema con consulta de actualizacion. en el foro de SQL Server en Foros del Web. Buenas a todos!!!!!! necesito ayuda con una consulta, tengo la siguiente tabla TablaA id numero flag secuencia 001 100 0 712 002 101 0 716 ...
  #1 (permalink)  
Antiguo 22/09/2009, 09:33
 
Fecha de Ingreso: diciembre-2008
Mensajes: 12
Antigüedad: 15 años, 4 meses
Puntos: 0
problema con consulta de actualizacion.

Buenas a todos!!!!!!

necesito ayuda con una consulta, tengo la siguiente tabla TablaA

id numero flag secuencia
001 100 0 712
002 101 0 716
003 101 1 720
004 102 0 730


con estos registros debo actualizar la TablaB, pero todos los reditros de la tabla TablaB desde la secuencia 712 hasta la secuencia 715 se actualizan con el id 001,
los registros de la tabla TablaB desde la secuencia 716 hasta la secuencia 719 se actualizan con el id 002 y asi para cada uno de los registros de la TablaA.


tengo lo seguiente pero no me funciona

UPDATE TablaB SET idTB=id
FROM TablaB TB INNER JOIN TablaA TA on TA.numero=TB.numero

pero no me da los resultados que espero.

si de alguna manera pudiera colocar la secuencia del registro 2 de la TablaA en una nueva columna quedando asi creo que sera mas facil para la condicial de actualizacion.


id numero flag secuencia secuencia2
001 100 0 712 716-1
002 101 0 716 720-1
003 101 1 720 730-1
004 102 0 730 max(secuencia where numero=numero)


Por favor si alguien me pudiera colaborar con gusto le agradezco.


Muchas GRACIAS!!!!!!!!!!!
  #2 (permalink)  
Antiguo 22/09/2009, 14:07
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: problema con consulta de actualizacion.

¿Cuál es la estructura de la tabla B?
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #3 (permalink)  
Antiguo 22/09/2009, 16:35
 
Fecha de Ingreso: diciembre-2008
Mensajes: 12
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: problema con consulta de actualizacion.

Cita:
Iniciado por flaviovich Ver Mensaje
¿Cuál es la estructura de la tabla B?


La estructura de la Tabla TablaB es igual a la de la tabla TablaA

id numero flag secuencia
005 201 0 815
006 202 0 817



espero que la informacion te sirva ya que no encuentro la forma de actualizar esos registros.

mil gracias!!!!!
  #4 (permalink)  
Antiguo 23/09/2009, 08:12
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: problema con consulta de actualizacion.

¿En TablaB no debería haber un registro con secuencia=712 en el cual reemplazarás el id por 001?
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #5 (permalink)  
Antiguo 23/09/2009, 09:15
 
Fecha de Ingreso: diciembre-2008
Mensajes: 12
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: problema con consulta de actualizacion.

Cita:
Iniciado por flaviovich Ver Mensaje
¿En TablaB no debería haber un registro con secuencia=712 en el cual reemplazarás el id por 001?


si, la cuestion de esta script es no utilizar bucles, he avanzado en lo siguiente, pero se me pierden unos registros nose que esta mal, aun estoy revisando, tambien tengo problemas al cambiar la secuencia a un numero mayor a 1000,
nose al realizar el %.







CREATE TABLE #tempR
(
id INT IDENTITY (1,1),
Campo1 INT,
Residuo INT
)

INSERT INTO #tempR (
Campo1
)
SELECT
714 AS Campo
UNION
SELECT
718 AS Campo
UNION
SELECT
720 AS Campo
UNION
SELECT
725 AS Campo
UNION
SELECT
730 AS Campo
union
SELECT
735 AS Campo


UPDATE #tempR
SET Residuo = CASE
WHEN id = 2 THEN 1
ELSE
Campo1%2
end

CREATE TABLE #A
(
id INT IDENTITY (1,1),
Campo1 INT,
)


CREATE TABLE #B
(
id INT IDENTITY (1,1),
Campo1 INT,
)


INSERT INTO #A (Campo1)
SELECT Campo1 FROM #tempR WHERE residuo = 0

INSERT INTO #B (Campo1)
SELECT Campo1 FROM #tempR WHERE residuo = 1

SELECT #A.Campo1,#B.Campo1 FROM
#A
LEFT JOIN #B
ON #A.id = #B.id



DROP TABLE #A
DROP TABLE #B
DROP TABLE #tempR




Muchas gracias por la ayuda que me pueda brindar!!!!!!
  #6 (permalink)  
Antiguo 23/09/2009, 10:00
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: problema con consulta de actualizacion.

Cuando secuencia2 es null te lo dejo como tarea.
Código sql:
Ver original
  1. UPDATE tablaB SET id = A.id
  2. FROM tablaB B
  3. INNER JOIN (
  4.     SELECT A.*, T.secuencia2
  5.     FROM tablaA A
  6.     LEFT JOIN (
  7.         SELECT A1.secuencia, MIN(A2.secuencia)[secuencia2]
  8.         FROM tablaA A1
  9.         INNER JOIN tablaA A2 ON A1.secuencia < A2.secuencia
  10.         GROUP BY A1.secuencia
  11.     ) T ON A.secuencia = T.secuencia
  12. ) A ON B.secuencia BETWEEN A.secuencia AND A.secuencia2
Suerte!
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #7 (permalink)  
Antiguo 23/09/2009, 10:09
 
Fecha de Ingreso: diciembre-2008
Mensajes: 12
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: problema con consulta de actualizacion.

Oye muchas gracias por tu ayuda!!!!!!!!.

lo resolvi de la siguinete manera aun que aun no estoy seguro cual es la mas optima, me voy a poner en la tarea.

aqui dejo la soucion.

CREATE TABLE #tempR
(
id INT IDENTITY (1,1),
Campo1 INT
)

INSERT INTO #tempR (
Campo1
)
SELECT
714 AS Campo
UNION
SELECT
718 AS Campo
UNION
SELECT
720 AS Campo
UNION
SELECT
725 AS Campo
UNION
SELECT
730 AS Campo
union
SELECT
735 AS Campo


CREATE TABLE #tempR2
(
id INT IDENTITY (1,1),
Campo1 INT,
Residuo INT
)

INSERT INTO #tempR2(Campo1)
SELECT
Campo1
FROM
#tempR
UNION
select
Campo1 -1
FROM
#tempR
ORDER BY
campo1 ASc


UPDATE #tempR2
SET Residuo = (id-1)%2
WHERE id <> 1

CREATE TABLE #A
(
id INT IDENTITY (1,1),
Campo1 INT,
)

CREATE TABLE #B
(
id INT IDENTITY (1,1),
Campo1 INT,
)


INSERT INTO #A (Campo1)
SELECT Campo1
FROM #tempR2
WHERE residuo = 1

INSERT INTO #B (Campo1)
SELECT Campo1
FROM #tempR2
WHERE residuo = 0

SELECT
#A.Campo1,
#B.Campo1
FROM #A
LEFT JOIN #B
ON #A.id = #B.id



DROP TABLE #A
DROP TABLE #B
DROP TABLE #tempR
DROP TABLE #tempR2




y de nuevo muchas gracias!!!!!!!!!!!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:48.