SQL - actualizar campo vacio de la misma tabla con campo con dato

 
Vista:

actualizar campo vacio de la misma tabla con campo con dato

Publicado por wachik (1 intervención) el 15/07/2019 18:31:46
Tengo lo siguiente en mi tabla,

ID Fec CIA VALOR

AAA14613 | 20190701 | 1 |
AAA14613 | 20190707 | 3 | 27000
AAA20534 | 20190709 | 3 |
AAA20534 | 20190710 | 5 | 40000

Y necesito que esa tabla se actualice y que poble los vacios con los valores correspondientes por id pueden ser mas de un id sin valor, pero uno de esos id debe si o si debe tener un valor. Debería quedar, mas o menos así:

ID Fec CIA VALOR

AAA14613 | 20190701 | 1 | 27000
AAA14613 | 20190707 | 3 | 27000
AAA20534 | 20190709 | 3 | 40000
AAA20534 | 20190710 | 5 | 40000

update univ_campania_all t1 set t1.valor= (select valor from ((select b.valor, ac.id from univ_sin_valor ac --universo acotado con todos los id con valor vacio, mucho a mucho, varios id pueden venir vacio inner join univ_valor b --universo acotado con todos los id que contiene valor, es uno a uno, un id contiene un valor on ac.id=b.id)) t2 where t2.id= t1.id ) where t1.valor is null

pero esta query me arroja mas de un valor en subquery y necesito para todos los id vacios
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
Imágen de perfil de Isaias
Val: 2.542
Oro
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

actualizar campo vacio de la misma tabla con campo con dato

Publicado por Isaias (1919 intervenciones) el 15/07/2019 19:10:49
Obten el valor MAX por ID y actualiza SOLO AQUELLOS que tienen valor en blanco

-- Probado en una version de SQL Server 2016

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
DECLARE @Mytabla AS TABLE
(ID VARCHAR(50), FEC VARCHAR(50), CIA INT, VALOR INT)
INSERT INTO @Mytabla (ID, FEC, CIA, VALOR) VALUES
 
('AAAA14613','20190701', 1,' '),
('AAAA14613','20190707',3 , 27000),
('AAAA20534','20190709',3,' '),
('AAAA20534','20190710', 5 , 40000)
 
--SELECT * FROM @Mytabla
--SELECT ID, MAX(VALOR) AS VALOR FROM @Mytabla GROUP BY id
 
UPDATE @Mytabla
SET valor = T2.VALOR
FROM @Mytabla T1
INNER JOIN (SELECT
ID, MAX(VALOR) AS VALOR FROM @Mytabla GROUP BY id) AS T2
ON t1.id = t2.id
AND T1.valor = ' '
 
SELECT * FROM @Mytabla

ID FEC CIA VALOR
AAAA14613 20190701 1 27000
AAAA14613 20190707 3 27000
AAAA20534 20190709 3 40000
AAAA20534 20190710 5 40000
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