나는 (있는 것 같다) 아주 쉬운 문제이지만 몇 시간 동안 검색 한 후에 도움이되는 것을 찾을 수 없다."그룹화"쿼리에서 그룹당 전체 행을 하나만 선택하는 방법은 무엇입니까?
가 여기에 문제의 : 마이크로 소프트 SQL에서
, 나는 테이블이 경우 열 이 저장 일부 데이터를. 이 데이터는 중복을 포함 할 수 있습니다 (즉, 두 개 이상의 행은 열 에 대해 동일한 값을가집니다).
내가 쉽게 중복 by doing 찾을 수 있습니다
select A, count(A) as CountDuplicates
from TableName
group by A having (count(A) > 1)
지금, 내가 다른 컬럼의 값을 검색하려면, 이제 B 및 C을 가정 해 봅시다. 물론 B 및 값은 동일한 값을 공유하는 행에 대해서도 다를 수 있지만 나에게는 아무런 문제가되지 않습니다. 나는 단지 B 값과 어떤 C 하나, 첫 번째, 마지막 또는 임의의 것을 원한다. , 문제는 내가 얻을 수있는 더 많은 행을 가지고 있고, 테이블이 매우 큰 것입니다
select A, count(A) as CountDuplicates, (
select top 1 child.B from TableName as child where child.A = base.A) as B
)
from TableName as base group by A having (count(A) > 1)
:
나는 내가 좋아하는 일을 할 것, 검색 할 수있는 작은 테이블 하나 또는 두 개의 열이 있다면 그래서 몇몇 아이들을 선택하는 것은 높은 성능 비용을 가질 것입니다.
그래서이 작업을 수행하는 추악한 순수 SQL 솔루션이 있습니까?
내 질문에 충분히 분명하다, 그래서 의 AdventureWorks 데이터베이스를 기반으로 예를 들어 줄 경우 확실하지. 가용 상태를 나열하고 각 주마다 코드, 도시 (도시) 및 주소 (주소)를 나열하고자한다고 가정 해 봅시다. LINQ - 투 - SQL에서
var q = from c in data.StateProvinces select new { c.StateProvinceCode, c.Addresses.First().City, c.Addresses.First().AddressLine1 };
181 개 국가의 각각에 대해 두 가지 선택, 그래서 363 선택을 할 것입니다 : 가장 쉬운, 그리고 할 수있는 가장 비효율적 인 방법이 될 것이다. 저의 경우, 최대 182 개의 선택을하는 방법을 찾고 있습니다.
Downvote - 나는 당신이 처음부터 대답을 총으로 쏜 것에 유죄라고 생각합니다. 분명히이 코드는 "form"과 "innet join"이라고 말하기 때문에 테스트하지 않았습니다. 또한, A가 고유 한 키 (그러나 기본 키가 아니라)에 의존한다는 사실은 그것을 나쁜 일반적인 해결책으로 만듭니다. –
ans updated now ... 정보 주셔서 감사합니다 –