Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Actualizar Datos En una misma tabla. (Mensaje Correcto) (https://www.clubdelphi.com/foros/showthread.php?t=75570)

AnuardMichelen 02-09-2011 18:47:32

Actualizar Datos En una misma tabla. (Mensaje Correcto)
 
Hola a todos, espero que estén bien.

Estoy tratando de actualizar unos registros de una tabla y lo estoy haciendo tomando como referencia una cantidad de registros de esa misma tabla. Pero a la hora de realizar el Update tengo como resultado datos que no necesito.

Para explicarme mas completo, ejemplo:

Tengo el plan A el cual contiene los datos organizados, entonces tengo varios planes B,C,D,F.... mas hay datos que están en el Plan A que necesariamente no tienen que estar o no están en los demás planes estos registro no los necesito.

Este es el Update que estoy realizando:

Código SQL [-]
Update planes_servicios O set o.precio_regular = coalesce 
((select d.precio_regular from planes_servicios D where d.id_plan = 'PLANMSTRO' 
and o.id_servicio = d.id_servicio),0) 
where coalesce (IN_PLAN, 'F') = 'F' and coalesce (RECLAMABLE,'F') = 'F' 
and exists (select h.precio_regular from planes_servicios H where h.id_plan = 'PLANMSTRO')

Gracias por su tiempo y ayuda.
Bendiciones a todos.

oscarac 02-09-2011 18:51:31

este mensaje se aprecia mejor...
pero para ser mas descriptivo podrias colocar ejemplos de como estan los datos y como quieres el resultado

porque aparentemente la consuta se ve bien... pero y los datos?

pon un ejemplo porfa

AnuardMichelen 02-09-2011 19:33:35

Ok este seria un ejemplo con la consulta que escribi:

Plan A Plan B

Servicio Nombre Precio Servicio Nombre Precio
001 Consulta 150 001 Consulta 50
002 Control 200 003 Radiogra 250

Me explico; los servicios del Plan A son los correctos. si el servicio 001 en el plan tiene precio 150 entonce el trabajo del Update es ponerlo 150 en el plan B.
Pero si el servicio 002 que esta en el plan A y no en el plan B lo que no quiero es que me lo inserte y le coloque precio 0, que es lo que me esta pasando.

Gracias por tu tiempo amigo.
Dios te bendiga.

Casimiro Notevi 02-09-2011 20:08:28

Para entenderlo mejor, ¿puedes poner la estructura de las tablas?

Ejemplo:
Código SQL [-]
create table 
tbTIPOSPROFESIONALES  
( 
  ID          domCodigoNoNulo, 
  Nombre      domNombre, 
  primary key (ID) 
); 
 
create table 
tbPAISES 
( 
  ID          domCodigoNoNulo, 
  Nombre      domNombre, 
  primary key (ID) 
); 
 
create table 
tbCIUDADES 
( 
  ID          domCodigoNoNulo, 
  ID_pais     domCodigoNoNulo, 
  Nombre      domNombre, 
  primary key (ID), 
  foreign key (ID_pais) references tbPAISES(ID) 
);

oscarac 02-09-2011 20:32:45

que tal algo asi
Código SQL [-]
Select Precio_regular into #Tempo from planes_servicios where d.id_plan = 'PLANMSTRO' 
Update planes_servicios O set o.precio_regular = 
(Select Precio_regular from planes_servicios where isnull(IN_PLAN, '') = 'F' and Isnull(RECLAMABLE, '') = 'F' and
exists (select h.precio_regular from #tempo))

oscarac 02-09-2011 20:38:39

mmm dandole vueltas al asunto creo que tampoco funcionaria
estamos chequeando el precio pero no el plan....

abelg 13-10-2011 22:33:41

que tal asi, me cree unas tablas temporales para simular tu tabla real. lo único que en realidad te interesaría es el Update, puedes testearlo en Sql Server este script pero el update creo funcionará para cualquier base de Datos.

Código SQL [-]
Create table #planes_servicios (
  id int identity not null,
  servicio varchar(10),
  nombre   varchar(10),
  precio money,
  id_plan varchar(20)
)

insert into #planes_servicios (servicio, nombre, precio, id_plan) values ('001', 'Consulta', 150, 'PLANMAESTRO')
insert into #planes_servicios (servicio, nombre, precio, id_plan) values ('002', 'Control', 75, 'PLANMAESTRO')
insert into #planes_servicios (servicio, nombre, precio, id_plan) values ('003', 'Radiogra', 180, 'PLANMAESTRO')
insert into #planes_servicios (servicio, nombre, precio, id_plan) values ('001', 'Consulta', 50, 'PLAN-B')
insert into #planes_servicios (servicio, nombre, precio, id_plan) values ('002', 'Control', 70, 'PLAN-B')
insert into #planes_servicios (servicio, nombre, precio, id_plan) values ('003', 'Radiogra', 80, 'PLAN-B')
insert into #planes_servicios (servicio, nombre, precio, id_plan) values ('004', 'XXXXXXXX', 750, 'PLAN-B')

Select *
from #planes_servicios

update #planes_servicios set precio = (Select ps.precio 
                                       from #planes_servicios ps
                                       where ps.id_plan = 'PLANMAESTRO' and ps.servicio = #planes_servicios.servicio)
where id_plan <> 'PLANMAESTRO' and servicio in (Select p.servicio 
                                       from #planes_servicios p 
                                       where p.id_plan = 'PLANMAESTRO')

Select *
from #planes_servicios

Drop table #planes_servicios

El update es lo que te interesaría.

Salu2


La franja horaria es GMT +2. Ahora son las 04:42:36.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi