2012-07-30 2 views
2

SQL Azure를 ASP 스크립트와 함께 사용하고 있으며 내 인생에서이 작업을 수행하는 데 아무런 노력이 없었습니다. 쿼리를 실행중인 테이블에는 많은 열이 있지만 2 열 (이름 및 전자 메일)의 고유 한 값을 쿼리하고 싶습니다. 거기에서 전체 행의 값을 반환하려고합니다.고유 한 열 값을 기반으로 행 데이터를 반환

SELECT DISTINCT quote_contact, quote_con_email 
FROM quote_headers 
WHERE quote_contact LIKE '"&query&"%' 

하지만 내가 다른 데이터 포인트를 검색 할 수 있도록 전체 행을 반환해야합니다

내 쿼리는 지금처럼 보인다 무엇. 1 년 전 나는 똑똑했다면 연락하기 위해 별도의 테이블을 만들었지 만 1 년 전이었습니다.

그리고 LiveSearch 기능을 구현하기 전에는.

+1

을하지만 같은 이름과 같은 전자 메일이 오 개 행이있는 경우 - 다섯 행의 어떤 표시하려는합니까? 5 행의 데이터를 하나의 행으로 집어 넣을 수는 없습니다. –

답변

0

한 가지 방법은 CTE (Common Table Expression)를 사용하는 것입니다. 이 CTE를 사용하면 데이터를 몇 가지 조건 (예 : quote_contactquote_con_email)으로 분할하고 SQL Server 번호를 각 파티션에 대해 1에서 시작하여 다른 기준 (예 : SomeDateTimeStamp)으로 정렬 할 수 있습니다.

따라서이 같은 시도 : 여기

;WITH DistinctContacts AS 
(
    SELECT 
     quote_contact, quote_con_email, (other columns here), 
     RN = ROW_NUMBER() OVER(PARTITION BY quote_contact, quote_con_email ORDER BY SomeDateTimeStamp DESC) 
    FROM 
     dbo.quote_headers 
    WHERE 
     quote_contact LIKE '"&query&"%' 
) 
SELECT 
    quote_contact, quote_con_email, (other columns here) 
FROM 
    DistinctContacts 
WHERE 
    RowNum = 1 

, I (즉, 이름/이메일의 각 쌍에 대해) 각각의 "파티션"에 대한 마지막 항목을 선택하고를 - 시간에 의해 내림차순 방식으로 정렬 우표.

당신이 찾고있는 것을 접근합니까 ??

+1

Marc,이 접근법은 내가 원하는 것처럼 들립니다. 나는 그것을 곧 시도해야 할 것이다. – hatrickwah

+1

그걸로 땜질 한 후, 나는 잘 일할 수있었습니다. 이 질의는 결과의 수를 과거 헤더에서 주로 나쁜 유형으로 줄였습니다. 그렇지 않으면 잘 작동합니다. 엄청 고마워. – hatrickwah

0

자세한 내용을 입력해야합니다. 이것은 내가 그들없이 함께 올 수 있습니다 :

WITH dist as (
SELECT DISTINCT quote_contact, quote_con_email, RANK() OVER(ORDER BY quote_contact, quote_con_email) rankID 
FROM quote_headers 
WHERE quote_contact LIKE '"&query&"%' 
), 
data as (
SELECT *, RANK() OVER(ORDER BY quote_contact, quote_con_email) rankID FROM quote_headers 
) 
SELECT * FROM dist d INNER JOIN data src ON d.rankID = src.rankID 
관련 문제