2


0

クエリによってこの除外行列を達成するための最良の方法は何ですか。

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

ProductCode | MRLSPN | MRLSPPN | MRLSDF | LGS | LGP | HOBN | HODF | HVO | HVOF MRLSPN |いいえ|いいえ|いいえ|いいえ|はい|いいえ|いいえ|いいえ|いいえ|いいえ|いいえ|いいえ|いいえ|いいえ|いいえ|いいえ|いいえ|いいえ|いいえ|いいえ|いいえ|いいえいいえ|いいえ|いいえ|いいえ|いいえ|いいえ|いいえ|いいえMRLSDF |いいえ|いいえ|いいえ|いいえ|いいえ|いいえ|いいえ|いいえ|いいえ|いいえ|いいえ|いいえ|いいえ|いいえ|いいえ|いいえ|いいえNo | No | No LGS | No | No | No | No | No | No | No | No | No LGP | Yes | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No |いいえ|いいえ|いいえ|はい|はい|いいえ|いいえ|いいえ|いいえHODF |いいえ|いいえ|いいえ|はい|はい|いいえ|いいえ|いいえ|いいえ|いいえ|いいえ|いいえ|いいえ|いいえ|いいえ|いいえ|いいえ|いいえ|いいえ|いいえ|はい|はい|はい|いいえ|いいえHVOF |はい|はい|はい|はい|はい|はい|はい|いいえ|いいえ

列をまたがって行ごとに準備ができています。

3 Answer


2


あなたのフォーマットを行列から連想テーブルに変えることができますか?

テーブルAdditionalProducts:SoldProductCode AdditionalProductCode

だからあなたのテーブルはこんな感じになるでしょう

SoldProdCode、追加のProdCode MRLSPN、LGP MRLSDF、LGP

今、あなたは言うために単にクエリを実行することができます

SELECT追加の商品コード追加の商品からWHERE売った商品コード= 'MRLSPN'

編集

このアプローチのもう1つの利点は、MRLSPNを購入した場合に特別割引を適用した場合にLGPが10%引き、MRLSDFを購入した場合に15ドル引き落とされる可能性があることです。 このモデルでは、関連テーブルを拡張して追加の属性を含めることができます。 これはあなたのモデルに当てはまるかもしれないし当てはまらないかもしれません。


0


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

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

CREATE TABLE ProductCode2ProductCodeMapping(ProductCodeId int、AllowedProductCodeId int)

両方の列を使用している複合主キーで。

次に、すべての商品と関連商品の行を挿入します。

それから単純に以下のように問い合わせます。

SELECT AllowedProductCodeId from ProductCode2ProductCodeMapping WHERE ProductCodeId = @myProductCodeId

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


0


多対多のリンクテーブルです。

販売CanBeSold ---- --------- MRLSPN LGP MRLSDF LGP…

そして、クエリ:

SELECT CanBeSold FROMマトリックスWHERE Sold = @Product