私はarticles
とdiscounts
テーブルを持っています。 Articles
はファミリーとサブファミリーを持つことができます(そうでないか、空白にすることができます)。SQL Serverクエリを "CASE"する方法
記事:customer_id
(順番を行います顧客)家族や亜科:私はに基づいて自分の割引との記事を取得する必要が
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%
。記事は家族だけに基づいて割引(サブファミリーは空欄)または家族とサブファミリーに割引が適用される可能性がありますが、どちらも表の顧客IDに関連付けられている必要があります。 1つの記事が何にもマッチしない場合、彼の割引はその顧客にとってはnullになります。例えば、顧客ABC123
が'F01'/'A02'
家族/サブファミリーにと'F01'/''
家族割引があり、
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'
しかし、あなたが見ることができるように:私はこのクエリを持っている割引と顧客の記事を取得する
まあ、。したがって、art1
の割引を受けるのに問題はありませんが、art2
はファミリーとサブファミリーに一致しません。正確な家族とサブファミリーとのマッチを検索して検索する方法はありますか?結果がない場合は、家族のみを検索しますか?したがって、お客様ABC123
は、art1
で40%の割引、商品に45%の割引がありますart2
ありがとうございました。
良いアイデアをしていますが、必要*記事ごとにより良いマッチング割引*ので、あなたは単に結果を1つの行に制限することはできません。この作業をするには、 'SELECT'節でサブクエリーにするか、' OUTER APPLY'を使います。 –