質問

クエリを介してこの除外マトリックスを実現する最良の方法は何ですか。

テーブルには一定数の製品があり、アイデアが製品が顧客に販売される場合(行で表される)、他の製品(列)は以下のルールマトリックスに基づいて販売される場合と販売されない場合があります。目的は、特定の販売済み製品コードで販売できる製品コードを取得することです。

ProductCode|MRLSPN|MRLSPPN|MRLSDF|MRLSPDF|LGS|LGP|HOBN|HODF|HVO|HVOF
MRLSPN     |No    |No     |No    |No     |No |Yes|No  |No  |No |No  
MRLSPPN    |No    |No     |No    |No     |No |No |No  |No  |No |No  
MRLSDF     |No    |No     |No    |No     |No |Yes|No  |No  |No |No  
MRLSPDF    |No    |No     |No    |No     |No |No |No  |No  |No |No  
LGS        |No    |No     |No    |No     |No |Yes|No  |No  |No |No  
LGP        |Yes   |No     |Yes   |No     |No |No |No  |No  |No |No
HOBN       |No    |No     |No    |No     |Yes|Yes|No  |No  |No |No  
HODF       |No    |No     |No    |No     |Yes|Yes|No  |No  |No |No  
HVO        |Yes   |Yes    |Yes   |Yes    |Yes|Yes|Yes |Yes |No |No  
HVOF       |Yes   |Yes    |Yes   |Yes    |Yes|Yes|Yes |Yes |No |No  

列全体で行ごとに準備ができています。

役に立ちましたか?

解決

形式をマトリックスから関連テーブルに変更できますか

Table AdditionalProducts:    SoldProductCode    AdditionalProductCode

つまり、テーブルは次のようになります

SoldProdCode, Additional ProdCode
MRLSPN, LGP
MRLSDF, LGP

これで、単にクエリを実行して発言することができます

SELECT AdditionalProductCode
FROM AdditionalProducts
WHERE SoldProductcode='MRLSPN'

編集

このアプローチのもう1つの利点は、MRLSPNを購入した場合に特別な割引を与えるとLGPが10%オフになり、MRLSDFを購入すると15 $オフになることです。このモデルを使用すると、関連付けテーブルを拡張して追加の属性を含めることができます。これは、モデルに適用される場合と適用されない場合があります。

他のヒント

これは多対多のリンクテーブルです:

Sold   CanBeSold
----   ---------
MRLSPN LGP
MRLSDF LGP
…

、およびクエリ:

SELECT  CanBeSold
FROM    matrix
WHERE   Sold = @Product

32列以下を保証できる場合、ビットフラグフィールドとしてint(32ビット)を使用して実装できます。しかし、多対多の関係はより柔軟になります。

多対多のマッピングテーブルProductCode2ProductCodeMappingを作成します

CREATE TABLE ProductCode2ProductCodeMapping
(
   ProductCodeId int,
   AllowedProductCodeId int
)

これら両方の列を使用する複合主キーを使用。

次に、すべての製品および関連製品の行を挿入します。

その後、次のようにクエリを実行します。

SELECT AllowedProductCodeId 
FROM ProductCode2ProductCodeMapping
WHERE ProductCodeId = @myProductCodeId

製品の整数IDがない場合は、それらを追加するか、代わりにchar productCodeを使用できます(前者のほうが望ましい)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top