2012-12-03 2 views
2

비어 있지 않은/비어 있지 않은 필드의 최대 수가있는 레코드의 레코드 ID를 제공하는 쿼리/SQL 쿼리 집합을 찾고 있는데, 널 필드 ".
나는 count()max() 함수를 조사하고 있었지만 동일한 열에 대해서는 문제를 해결할 수 있지만 같은 행에는 문제를 해결하지 못하는 것 같습니다.비어 있지 않은 필드의 최대 수가있는 레코드를 표시하기위한 SQL 쿼리

도와주세요.

답변

1

당신은 비어 있지 않은 필드의 양을 order by 수 :

select top 1 Record_ID 
from YourTable 
order by 
     case when isnull(col1,'') <> '' then 1 else 0 end + 
     case when isnull(col2,'') <> '' then 1 else 0 end + 
     case when isnull(col3,'') <> '' then 1 else 0 end + 
     ... 
     case when isnull(colN,'') <> '' then 1 else 0 end 

이 SQL 서버 구문입니다. 다른 데이터베이스를 사용하는 경우 귀하의 질문을 수정하십시오.

+0

감사합니다 Andomar, 그리고 귀하의 답변은 표적에 강타되었습니다. 그냥 sqllite DB를 사용하고 있었기 때문에 ifnull()과 1을 LIMIT 1로 변경해야했습니다. 그러나 다른 DB에서이 작업을 수행해야한다면 number의 값을 저장할 수 있는지 궁금합니다. 비어 있지 않은 필드를 비교하여 비교하고 승자를 선택할 수 있습니다. 그 Andomar는 어때? – user1872325

+0

해결 방법을 찾았습니다. UNION 키워드를 사용하여 필요한 모든 레코드를 동일한 (임시) 테이블에 연결 한 다음이 쿼리를 수행합니다. 어떤 DB가 승자가 왔는지를 결정하기 위해 상수 필드를 추가합니다 (동일한 레코드 ID가 두 DB 모두에서 유행 할 수 있으므로 필요합니다). 이 두 가지를 사용하여 승자를 계산합니다. 도움을 주셔서 감사합니다. – user1872325

관련 문제