2014-08-12 5 views
0

저는 SQL Server 2012를 사용하고 있습니다. 두 테이블 M_SALES & M_SALES_COUNTRY가 있습니다. M_SALES는 sales_id라는 기본 키를 포함합니다. M_SALES_COUNTRY에는 외래 키인 sales_id라는 필드도 있습니다. M_SALES_COUNTRY에는 country_code라는 필드도 있으며,이 필드는 null 일 수 있습니다.외래 키 테이블에서 단 하나의 레코드를 선택하십시오

그래서 M_SALES에는 고유 한 sale_id가 있습니다. M_SALES_COUNTRY는 동일한 판매 ID를 여러 개 포함 할 수 있습니다.

아래의 쿼리에서 M_SALES_COUNTRY의 레코드가 M_SALES 테이블의 각 sales_id에 대해 반환됩니다 (여러 개일 수 있지만 하나만 원할 수 있음). 그러나 추가 조건을 추가 할 수 있는지 알고 싶습니다.

M_SALES의 sale_id가 M_SALES_COUNTRY의 여러 sale_id를 참조하는 경우 country_code 필드가 null이 아닌 레코드를 반환하고 싶습니다. 모든 레코드 country_code가 널 (NULL)이면 널 (NULL)을 리턴합니다. 아래의 두 가지 간단한 예제를 참조하십시오.

sale_id  country_code 
AAA5555  null 
AAA5555  null 
AAA5555  D56 

기록 나는 D56을 반환하고 싶습니다.

어떤 기록이 한 일이 반환됩니다 여기에 할 것

sale_id  country_code 
AAA5555  null 
AAA5555  null 
AAA5555  null 

다음 예.

쿼리

select M_SALES.*, M_SALES_COUNTRY.* 
from M_SALES cross apply 
(
    select top 1 M_SALES_COUNTRY.* 
    from M_SALES_COUNTRY 
    where M_SALES.sale_id = M_SALES_COUNTRY.sale_id  
) MA_DEALS_COUNTRY 
    order by M_SALES.sale_id 

답변

0

당신은 즉

SELECT * 
FROM M_SALES 
JOIN (SELECT sales_id, max(country_code) as country_code 
        FROM M_SALES_COUNTRY GROUP BY sales_id 
    ) M_SALES_COUNTRY 
ON M_SALES_COUNTRY.sales_id = M_SALES.sales_id 

나는 또한 M_Sales_Country 테이블을 청소하면 해당 sales_id 고유 될 수 있도록 중 하나를 고려할 하위 쿼리와 중복을 제거하고 해당 테이블에 가입 할 수 , 또는 판매 ID에 대해 고유 한 값을 포함하는 다른 버전을 작성하십시오.

관련 문제