나는 articles
및 discounts
테이블이 있습니다. Articles
에는 가족과 하위 가족이있을 수 있습니다 (또는 없거나 공백 일 수 있음)."사례"SQL Server 쿼리
기사 :
id | name | price | family | subfamily
1 | art1 | 5 | F01 | A02
2 | art2 | 4 | F01 | A03
3 | art3 | 5.5 | F02 |
할인 내가에 따라 할인과 기사를 검색해야
id | customer_id | family | subfamily | discount
1 | ABC123 | F01 | A02 | 40%
1 | ABC123 | F01 | | 45%
2 | CBD321 | F02 | | 30%
: 가족과 아과
customer_id
(주문을 할 것입니다 고객). 기사는 그의 가족 (subfamily는 공백이다) 또는 그의 가족 및 subfamily에 근거를 두는 할인이있을 수 있었다 그러나 둘 다 테이블에 고객 id에 associed 필요가있다. 하나의 기사가 어떤 내용과도 일치하지 않으면 해당 고객의 할인이 null이됩니다.
음, 할인과 고객의 기사를 검색하기 위해 나는이 쿼리가 :
SELECT a.*, d.discount
FROM articles a
LEFT JOIN discounts AS d ON a.family = d.family AND a.subfamily = d.subfamily
AND d.customer_id = 'ABC123'
을하지만 당신이 볼 수있는, 예를 들어 고객 ABC123
에 대한 'F01'/'A02'
가족/아과와 'F01'/''
가족 할인이있다. 따라서 art1
할인 혜택을 받으려면 아무런 문제가 없지만 art2
은 가족 및 하위 계급과 일치하지 않습니다. 정확한 가족 및 하위 가족과 일치하는 항목을 먼저 쿼리하고 검색 할 수있는 방법이 있습니까? 결과가 없으면 가족 만 검색 할 수 있습니까? 따라서 ABC123
고객은 art1
에 40 % 할인을 적용하고 상품에 45 % 할인을 적용합니다. art2
감사합니다.
좋은 생각을하지만, 당신이 필요합니다 기사 당 * 더 잘 맞는 할인 *, 그래서 당신은 단순히 결과를 한 행으로 제한 할 수 없습니다. 이 작업을하기 위해서는'SELECT' 절에서 서브 쿼리로 만들거나'OUTER APPLY'를 사용하십시오. –