programing

BIT 열의 MAX 값 가져오기

firstcheck 2023. 6. 22. 23:45
반응형

BIT 열의 MAX 값 가져오기

조인된 테이블에 'inner join'이 있는 SELECT 요청이 있습니다. 이 열은 비트 타입입니다.

조인된 테이블의 값이 1인 경우 1을 선택하고 싶습니다.그렇지 않으면 값은 0이 됩니다.

그래서 내가 가지고 있다면,

PERSID | NAME
1      |  Toto
2      |  Titi
3      |  Tata

그리고 두번째 테이블은

PERSID | BOOL
1      |  0
1      |  0
2      |  0
2      |  1

저는 결과를 얻기를 원합니다.

Toto -> 0
Titi -> 1
Tata -> 0

시도해 봅니다.

SELECT 
     sur.*
    ,MAX(bo.BOOL)    

    FROM SURNAME sur              
    INNER JOIN BOOL bo
    ON bo.IDPERS = sur.IDPERS

그러나 BIT 열에서는 MAX를 사용할 수 없습니다.어떻게 하면 좋을까요?

감사해요.

당신은 그것을 a에게 던질 수 있습니다.INT그리고 심지어 그것을 다시 a로 던집니다.BIT필요하다면

SELECT 
     sur.*
    ,CAST(MAX(CAST(bo.BOOL as INT)) AS BIT)
    FROM SURNAME sur              
    INNER JOIN BOOL bo
    ON bo.IDPERS = sur.IDPERS

시도:

max(cast(bo.BOOL as int))

암시적인 캐스팅을 강요함으로써 지저분하게 보이는 더블 캐스팅을 피할 수 있습니다.

SELECT 
     sur.*
    ,CAST(MAX(1 * bo.BOOL) AS BIT)
    FROM SURNAME sur              
    INNER JOIN BOOL bo
    ON bo.IDPERS = sur.IDPERS

편도

SELECT 
     sur.*
    ,MAX(convert(tinyint,bo.BOOL))    

    FROM SURNAME sur              
    INNER JOIN BOOL bo
    ON bo.IDPERS = sur.IDPERS

설정된 비트가 정확히 하나인 사용자만 원하는 경우:

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

언급URL : https://stackoverflow.com/questions/10803968/get-max-value-of-a-bit-column

반응형