Pergunta

Qual é a melhor maneira de alcançar essa matriz de exclusão via consulta.

Há um número fixo de produtos em uma tabela e a idéia é que, se um produto for vendido a um cliente (representado por linha), os outros produtos (colunas) podem ou não ser vendidos com base na matriz de regra abaixo. O objetivo é obter o código de produtos que podem ser vendidos para qualquer código de produto vendido.

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  

Pronto por linha através de colunas.

Foi útil?

Solução

Você pode alterar seu formato de uma matriz para uma tabela de associação como

Tabela Adicional PRODUCTS: VENDIDOCODUCTCODEDCODCODCODCODCODCODCO

Então sua mesa ficaria

SoldProdCode, Additional ProdCode
MRLSPN, LGP
MRLSDF, LGP

Agora você pode simplesmente executar uma consulta para dizer

SELECT AdditionalProductCode
FROM AdditionalProducts
WHERE SoldProductcode='MRLSPN'

Editar

Outro benefício dessa abordagem é que, se você der descontos especiais, se você comprar MRLSPN, receberá LGP com 10% de desconto e, se comprar MRLSDF, poderá receber 15 $. Com este modelo, você pode estender a tabela de associação para incluir atributos adicionais. Isso pode ou não se aplicar ao seu modelo.

Outras dicas

É uma tabela de link para muitos para muitos:

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

, e uma consulta:

SELECT  CanBeSold
FROM    matrix
WHERE   Sold = @Product

Se você puder garantir não mais que 32 colunas, poderá implementar o uso de um INT (32 bits) como um campo de bandeira. Mas um relacionamento de muitos para muitos será mais flexível.

Crie uma tabela de mapeamento de muitos para muitos, ProductCode2ProductCodemapping

CREATE TABLE ProductCode2ProductCodeMapping
(
   ProductCodeId int,
   AllowedProductCodeId int
)

Com uma chave primária composta usando ambas as colunas.

Em seguida, insira uma linha para cada produto e produto relacionado.

Em seguida, basta consultar como:

SELECT AllowedProductCodeId 
FROM ProductCode2ProductCodeMapping
WHERE ProductCodeId = @myProductCodeId

Se você não possui IDs inteiros para produtos, você pode adicioná -los ou usar o Char ProductCode (eu preferiria o primeiro)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top