2012-05-29 4 views
30

조인 된 테이블에서 '내부 조인'이있는 SELECT 요청이 비트 형식의 열입니다. 이 경우가 아니라면BIT 열의 최대 값 가져 오기

나는 값이 내가 가지고있는 그래서 경우 0

될 것 조인 된 테이블에 1. 최대 하나 개의 값이면 1을 선택합니다 :

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

그리고 내가 좋아하는 것

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

두 번째 테이블은 결과

Toto -> 0 
Titi -> 1 
Tata -> 0 
,369에 대해 갖고

나는이 시도 :

SELECT 
    sur.* 
    ,MAX(bo.BOOL)  

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

을하지만 MAX 내가 그렇게 할 수 그럼 어떻게 .. BIT 열을 사용할 수 없습니다?

감사합니다,

+0

1. – HABO

답변

50

는 당신이 INT에 캐스팅, 심지어 당신이

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

시도 :

max(cast(bo.BOOL as int)) 
+3

입니다 한 줄의 코드 만 게시하지 마십시오. 설명해주세요. -1 – Manishearth

+0

그는 최대 집계 함수를 사용할 수 있도록 정수로 캐스팅했습니다. 덕분에 – Jackson

5

한 가지 방법으로해야하는 경우 BIT로 다시 전송할 수 있습니다

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

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

! CAST()와 CONVERT() 사이에 차이점이 있습니까? – bAN

+1

그들은 동일하지 않습니다, 나는 다만 잘 개조하고 싶습니다 – SQLMenace

0

당신이 만 그 사람을 원하는 경우에 정확히 한 세트 비트 : 당신은 당신이 _exactly_ 하나 개의 값을 확인하려면`SUM`와`GROUP BY`를 사용해야 할 것 같습니다

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 
관련 문제