una - seleccionar valores maximos sql
Obtenga el valor MAX de una columna BIT (4)
De una sola mano
SELECT
sur.*
,MAX(convert(tinyint,bo.BOOL))
FROM SURNAME sur
INNER JOIN BOOL bo
ON bo.IDPERS = sur.IDPERS
Tengo una solicitud SELECT con ''unión interna'' en la tabla unida es una columna con tipo de bit.
Quiero seleccionar 1 si en la tabla unida hay como máximo un valor con 1. Si no es el caso, el valor será 0.
Entonces si tengo:
PERSID | NAME
1 | Toto
2 | Titi
3 | Tata
Y la segunda mesa
PERSID | BOOL
1 | 0
1 | 0
2 | 0
2 | 1
Me gustaría tener un resultado
Toto -> 0
Titi -> 1
Tata -> 0
Intento esto:
SELECT
sur.*
,MAX(bo.BOOL)
FROM SURNAME sur
INNER JOIN BOOL bo
ON bo.IDPERS = sur.IDPERS
Pero MAX no está disponible en la columna BIT. Entonces, ¿cómo puedo hacer eso?
Gracias,
Si solo quieres a esas personas con exactamente un bit establecido:
declare @Surname as Table ( PersId Int, Name VarChar(10) )
insert into @Surname ( PersId, Name ) values
( 1, ''Toto'' ), ( 2, ''Titi'' ), ( 3, ''Tata'' ), ( 4, ''Tutu'' )
declare @Bool as Table ( PersId Int, Bool Bit )
insert into @Bool ( PersId, Bool ) values
( 1, 0 ), ( 1, 0 ),
( 2, 0 ), ( 2, 1 ),
( 4, 1 ), ( 4, 0 ), ( 4, 1 )
select Sur.PersId, Sur.Name, Sum( Cast( Bo.Bool as Int ) ) as [Sum],
case Sum( Cast( Bo.Bool as Int ) )
when 1 then 1
else 0
end as [Only One]
from @Surname as Sur left outer join
@Bool as Bo on Bo.PersId = Sur.PersId
group by Sur.PersId, Sur.Name
order by Sur.Name
Tratar:
max(cast(bo.BOOL as int))
puedes lanzarlo a una INT
, e incluso devolverlo a un BIT
si necesitas
SELECT
sur.*
,CAST(MAX(CAST(bo.BOOL as INT)) AS BIT)
FROM SURNAME sur
INNER JOIN BOOL bo
ON bo.IDPERS = sur.IDPERS