Domanda

Qual è il modo migliore per ottenere questa matrice di esclusione tramite query.

Esiste un numero fisso di prodotti in una tabella e l'idea è se un prodotto è venduto a un cliente (rappresentato da una riga), gli altri prodotti (colonne) possono o meno essere venduti in base alla matrice delle regole di seguito. L'obiettivo è ottenere il codice di prodotti che possono essere venduti per un determinato codice di prodotto venduto.

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 per riga tra le colonne.

È stato utile?

Soluzione

Puoi cambiare il tuo formato da una matrice a una tabella di associazione come

Tabella prodotti aggiuntivi:    SoldProductCode    AdditionalProductCode

Quindi il tuo tavolo sarebbe simile

SoldProdCode, Additional ProdCode
MRLSPN, LGP
MRLSDF, LGP

Ora puoi semplicemente eseguire una query per dire

SELECT AdditionalProductCode
FROM AdditionalProducts
WHERE SoldProductcode='MRLSPN'

Modifica

Un altro vantaggio di questo approccio è che se offri sconti speciali se acquisti MRLSPN ricevi LGP con uno sconto del 10% e se acquisti MRLSDF potresti ottenere uno sconto di 15 $. Con questo modello è possibile estendere la tabella delle associazioni per includere ulteriori attributi. Questo può o meno essere applicato al tuo modello.

Altri suggerimenti

È una tabella di collegamenti molti-a-molti:

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

e una query:

SELECT  CanBeSold
FROM    matrix
WHERE   Sold = @Product

Se non puoi garantire più di 32 colonne, puoi implementare usando un int (32 bit) come campo bit-flag. Ma una relazione molti-a-molti sarà più flessibile.

Crea una tabella di mapping molti-a-molti, ProductCode2ProductCodeMapping

CREATE TABLE ProductCode2ProductCodeMapping
(
   ProductCodeId int,
   AllowedProductCodeId int
)

Con una chiave primaria composita che utilizza entrambe queste colonne.

Quindi inserire una riga per ogni prodotto e prodotto correlato.

Quindi esegui una query come:

SELECT AllowedProductCodeId 
FROM ProductCode2ProductCodeMapping
WHERE ProductCodeId = @myProductCodeId

Se non si dispone di ID interi per prodotti, è possibile aggiungerli o utilizzare il codice prodotto char (preferirei il primo)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top