Question

Quel est le meilleur moyen de réaliser cette matrice d'exclusion via une requête.

Il y a un nombre fixe de produits dans un tableau. L'idée est que si un produit est vendu à un client (représenté par une ligne), les autres produits (colonnes) peuvent être vendus ou non en fonction de la matrice de règles ci-dessous. L’objectif est d’obtenir le code produit qui est autorisé à être vendu pour n’importe quel code produit vendu.

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  

Prêt par rangée dans les colonnes.

Était-ce utile?

La solution

Pouvez-vous changer votre format d'une matrice à une table d'association comme

Table AdditionalProducts:    SoldProductCode    AdditionalProductCode

Ainsi, votre table ressemblerait à

SoldProdCode, Additional ProdCode
MRLSPN, LGP
MRLSDF, LGP

Maintenant, vous pouvez simplement lancer une requête pour dire

SELECT AdditionalProductCode
FROM AdditionalProducts
WHERE SoldProductcode='MRLSPN'

Modifier

Un autre avantage de cette approche est que, si vous offrez des réductions spéciales si vous achetez MRLSPN, vous obtenez LGP à 10% de réduction et si vous achetez MRLSDF, vous pourriez bénéficier d’une réduction de 15 $. Avec ce modèle, vous pouvez étendre la table d'association pour inclure des attributs supplémentaires. Cela peut ou non s’appliquer à votre modèle.

Autres conseils

C'est une table de liens plusieurs-à-plusieurs:

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

et une requête:

SELECT  CanBeSold
FROM    matrix
WHERE   Sold = @Product

Si vous ne pouvez pas garantir plus de 32 colonnes, vous pouvez l'implémenter en utilisant un int (32 bits) comme champ indicateur de bits. Mais une relation plusieurs-à-plusieurs sera plus flexible.

Créer une table de mappage plusieurs à plusieurs, ProductCode2ProductCodeMapping

CREATE TABLE ProductCode2ProductCodeMapping
(
   ProductCodeId int,
   AllowedProductCodeId int
)

Avec une clé primaire composite utilisant ces deux colonnes.

Ensuite, insérez une ligne pour chaque produit et produit associé.

Ensuite, interrogez simplement en tant que:

SELECT AllowedProductCodeId 
FROM ProductCode2ProductCodeMapping
WHERE ProductCodeId = @myProductCodeId

Si vous n'avez pas d'identifiant entier pour les produits, vous pouvez les ajouter ou utiliser le code de produit char (car je préférerais l'ancien)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top