문제

내 상사는 약 2 주 후에는 불가능하다는 과제를 주었다. 나는 해결책을 알아낼 수 없으므로 SO 그룹의 도움을 요청하기 위해 이것을 버리고있다. 이것이 당신의 두뇌를 부러 뜨리면 사과드립니다.

작은 배경 먼저 : 우리는 사용자가 SQL을 모르고 데이터베이스에서 원하는 것을 되 찾을 수있는 데이터베이스 쿼리 애플리케이션을 개발합니다.

내 문제 : 우리는 "고유 한"선택을 사용하는 방식을 사용자 정의하고 싶습니다. 선택된 행에 뚜렷한 키워드를 적용하는 대신 특정 필드에만 적용되므로 필드와 일치하는 첫 번째 행이 사용됩니다. 예를 들어 :

밥 존스, 122 메인 스트리트, 포틀랜드 또는
수 존스, 122 메인 스트리트, 포틀랜드 또는
Mary Smith, 458 32nd Street, 포틀랜드 또는
Ralph Smith, 458 32nd Street, 포틀랜드 또는

각 주소에 대한 첫 번째 행만이 다음과 같이 반환되도록이 작동을 원합니다.

밥 존스, 122 메인 스트리트, 포틀랜드 또는
Mary Smith, 458 32nd Street, 포틀랜드 또는

정상적인 뚜렷한 경우, 4 개의 행이 모두 반환됩니다. 누구든지 우리 가이 작업을 수행 할 수있는 방법에 대한 아이디어가 있습니까? 감사.

도움이 되었습니까?

해결책

WITH NumberedRows AS (
   SELECT FirstName, LastName, Address,
          ROW_NUMBER() OVER (PARTITION BY Address ORDER BY Id) as RowNumber
   FROM Table
) SELECT FirstName, LastName, Address
  FROM NumberedRows
  WHERE RowNumber = 1;

PARTITION BY Address 그룹화하려는 열 목록을 지정하고 ORDER BY ID "첫 번째"항목을 정의하는 열 목록을 표시합니다.

(이전 진술이 세미콜론에 의해 종료되었는지 확인하십시오.)

다른 팁

필드에 대해서만 쿼리하는 정기적 인 "Select"Select "SQL 문을 실행해야합니다. 그런 다음 해당되면 데이터가 일치하는 상위 1 레코드를 가져와 비 분리 필드를 얻는 다른 쿼리를 실행하십시오. 현재 나는 단일 SQL 문으로 이것을 할 방법이 보이지 않습니다 ...

Min (A.FirstName + A.LastName), 주소 별 X Group의 주소를 선택하십시오.

그것은 지나치게 단순한 대답이지만, 당신의 포인트가 발생합니다. 각각의 별개의 주소에 대한 "Lesser"이름 만 반환합니다.

구별을 수행하려면 필드 연결을 사용해야하지만 필요한 것을 줄 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top