Frage

Was ist der beste Weg, um diese Ausschlussmatrix durch Abfrage zu erreichen?

Es gibt eine feste Anzahl von Produkten in einer Tabelle und die Idee ist, wenn ein Produkt an einen Kunden verkauft wird (in der Zeile vertreten), können die anderen Produkte (Spalten) basierend auf der unten stehenden Regelmatrix verkauft werden oder nicht. Ziel ist es, Produktcodes zu erhalten, die für einen bestimmten verkauften Produktcode verkauft werden dürfen.

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  

Bereit nach Spalten.

War es hilfreich?

Lösung

Können Sie Ihr Format von einer Matrix in eine Assoziationstabelle ändern?

Tabelle Zusätzliche Produkte: SoldproductCode zusätzlichproduktCode

Ihr Tisch würde also so aussehen

SoldProdCode, Additional ProdCode
MRLSPN, LGP
MRLSDF, LGP

Jetzt können Sie einfach eine Anfrage ausführen, um sie zu sagen

SELECT AdditionalProductCode
FROM AdditionalProducts
WHERE SoldProductcode='MRLSPN'

Bearbeiten

Ein weiterer Vorteil dieses Ansatzes ist das, wenn Sie Sonderrabatte angeben, wenn Sie MRLSPN kaufen, haben Sie LGP mit 10% Rabatt und wenn Sie MRLSDF kaufen, erhalten Sie möglicherweise 15 $ Rabatt. Mit diesem Modell können Sie die Assoziationstabelle um zusätzliche Attribute erweitern. Dies kann für Ihr Modell gelten oder nicht.

Andere Tipps

Es ist eine viele zu viele Linkstabellen:

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

, und eine Frage:

SELECT  CanBeSold
FROM    matrix
WHERE   Sold = @Product

Wenn Sie nicht mehr als 32 Spalten garantieren können, können Sie mit einem Int (32 Bit) als Bit-Flag-Feld implementieren. Aber eine viel zu viele Beziehung wird flexibler sein.

Erstellen Sie eine viele zu viele Mapping-Tabellen, ProductCode2ProductCodemapping,

CREATE TABLE ProductCode2ProductCodeMapping
(
   ProductCodeId int,
   AllowedProductCodeId int
)

Mit einem zusammengesetzten Primärschlüssel mit beiden Spalten.

Fügen Sie dann eine Zeile für jedes Produkt und das verwandte Produkt ein.

Dann einfach als:

SELECT AllowedProductCodeId 
FROM ProductCode2ProductCodeMapping
WHERE ProductCodeId = @myProductCodeId

Wenn Sie keine Ganzzahl -IDs für Produkte haben, können Sie sie entweder hinzufügen oder den Char ProductCode verwenden (ich würde das erstere bevorzugen)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top