2016-09-27 3 views
0

일부 필드에서 집계하고 다른 필드에 null이 아닌 값을 가져 오려고합니다.집계에서 다른 fileds의 null이 아닌 값을 가져옵니다.

SELECT id, any_value(field1), any_value(field2) FROM mytable GROUP BY ID 

과 열 같다 : 쿼리 같이 보입니다 더 정확하게하려면 ...

ID | field1 | field 2 
----------------- 
id | null | 3 
id | 1  | null 
id | null | null 
id | 2  | 4 

및 출력이 (id, 1,4) 또는 (id,2,4) 나처럼 될 수 있지만 뭔가 (id, 1, null)

같은

any_value()이 null이 아닌 행을 반환하는 것이 보장되는지 (예 : 내 실험에서 그러 했음에도 불구하고) 보장되지 않았거나 som이 있더라도 null 값이있는 행을 반환 할 수있는 경우 문서에서 찾을 수 없습니다. e가 아닌 값.

내가 설명한 작업을 any_value() 수행합니까? 만약 당신이 그것을하기 위해 어떤 방법으로 제안하지 않습니까?

+0

질문을 따르지 못합니다. 질의에는 'id'가 있지만 샘플 데이터에는 없습니다. 출력에 세 개의 열이 있지만 혼란 스럽습니다. –

+0

나는 내 질문을 편집했다. 지금은 분명하다. –

답변

0

이 추측의 일종이다,하지만 당신은 시도 :

SELECT id, MIN(field1), MAX(field2) 
FROM mytable 
GROUP BY id; 

NULL 값은 두 개의 열에서 다른 값을 반환 무시합니다.

0

분석 기능도 사용할 수 있습니다. 다음은

쿼리 (SQL 서버)입니다 : 당신이 모든 열에서 항목 최대 값을 찾고있는 경우에만 한 행을 반환합니다

select id, field1, field2 
    from (select id, field1, field2, row_number() 
    over (partition by id order by isnull(field1, 'ZZZ') asc, isnull(field2, 'ZZZ') asc) as RNK from mytable) aa 
    where aa.RNK = 1; 

, 당신은 order by 절에서 순서를 변경할 수 있습니다.

관련 문제