반응형
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
반응형
'programing' 카테고리의 다른 글
유형 스크립트 - 인터페이스의 모든 구현을 가져옵니다. (0) | 2023.06.22 |
---|---|
TS 오류:'string' 형식이 배열 형식이나 문자열 형식이 아닙니다.어떻게 끈이 끈이 아닌가요? (0) | 2023.06.22 |
스프링 부트 기본 메모리 설정은 무엇입니까? (0) | 2023.06.22 |
Cloud Firestore와 Firebase 실시간 데이터베이스의 차이점은 무엇입니까? (0) | 2023.06.22 |
루비: 보석을 어떻게 쓰나요? (0) | 2023.06.22 |