SQL - Si un valor es 1, los demás valores se convertirán en 1??

 
Vista:
sin imagen de perfil
Val: 37
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Si un valor es 1, los demás valores se convertirán en 1??

Publicado por Jorge (19 intervenciones) el 18/02/2024 23:37:23
Saludos, estoy estancado en esto, tal vez me puedan dar ideas
Motor de BD: MsSQLServer 2014

tengo una tabla con las siguientes columnas

1
2
3
4
5
Cd_Vta		cantidad	monto	Bloqueado
VT00089351	2.00		130.00	0
VT00089402	3.00	 	 60.00	0
VT00089402	0.00	  	  5.50	1
VT00089461	0.00	 	 54.50	1

como se puede ver el codigo VT00089402 tiene 2 valorea de bloqueado (0 y 1)

¿Cómo puedo hacer para que cuando un Cd_Vta tenga valor Bloqueado (1), todos los valores los tome como 1 para ese Cd_Vta?
quedando de la siguiente forma:

1
2
3
4
5
Cd_Vta		cantidad	monto	Bloqueado
VT00089351	2.00		130.00	0
VT00089402	3.00	 	 60.00	1
VT00089402	0.00	  	  5.50	1
VT00089461	0.00	 	 54.50	1

Gracias,
Seguiré intentando
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 PCID

Si un valor es 1, los demás valores se convertirán en 1??

Publicado por PCID (1 intervención) el 19/02/2024 01:21:25
-----------------------------------------------------------------------------------------------------------------------------
Si solo es para hacer una consulta sin modificar los valores existentes en la tabla
-----------------------------------------------------------------------------------------------------------------------------

Se me ocurre que calculando el valor máximo de la columna "Bloqueado" agrupando por "Cd_Vta" y haciendo un "join" contra esa "tabla virtual" se resuelve el problema...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
if not object_id('tablax') is null drop table tablax;
go
 
create table tablax (Cd_Vta	varchar(100),	cantidad decimal(16, 2),	monto decimal(16, 2),	Bloqueado tinyint);
go
 
insert into tablax (Cd_Vta, cantidad, monto, Bloqueado)
	values	('VT00089351', 2.00, 130.00, 0)
			, ('VT00089402', 3.00, 60.00, 0)
			, ('VT00089402', 0.00, 5.50, 1)
			, ('VT00089461', 0.00, 54.50, 1);
 
 
select * from tablax;
 
-- El SELECT utilizando la subconsulta... Tabla virtual... O como le prefieran llamar...
select a.Cd_Vta, a.cantidad, a.monto, b.Bloqueado
from tablax a
	inner join (	select Cd_Vta, max(Bloqueado) as Bloqueado
					from tablax
					group by Cd_Vta
				) b on b.Cd_Vta = a.Cd_Vta
 
go
 
if not object_id('tablax') is null drop table tablax;
go

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
-- El SELECT directo...
Cd_Vta            cantidad   monto   Bloqueado
----------------- ---------- ------- ---------
VT00089351        2.00       130.00  0
VT00089402        3.00       60.00   0
VT00089402        0.00       5.50    1
VT00089461        0.00       54.50   1
 
(4 rows affected)
 
 
-- El SELECT utilizando la subconsulta... Tabla virtual... O como le prefieran llamar...
Cd_Vta            cantidad   monto   Bloqueado
----------------- ---------- ------- ---------
VT00089351        2.00       130.00  0
VT00089402        3.00       60.00   1
VT00089402        0.00       5.50    1
VT00089461        0.00       54.50   1
 
(4 rows affected)


-----------------------------------------------------------------------------------------------------------------------------
Si hace falta que el valor de BLOQUEADO cambie a "1" para todos los registros de
Cd_Vta igual al del registro que está quedando con esa bandera activa
-----------------------------------------------------------------------------------------------------------------------------

Entonces con un disparador/trigger se podría resolver el asunto... Si ese es el caso avisa...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 37
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Si un valor es 1, los demás valores se convertirán en 1??

Publicado por Jorge (19 intervenciones) el 19/02/2024 02:45:10
gracias, lo intentaré :)
el propósito de esta consulta es utilizarla para generar otra consulta

por ejemplo para filtrar, para tomar en cuenta solamente los Cd_Vta que contienen 0 como bloqueado y que los que contienen 1 no sean tomados en cuenta
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