valores valor una seleccionar registros obtener minimo maximos maximo funciones funcion contar columna agrupamiento agrupados sql sql-server-2008 tsql stored-procedures

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