쿼리를 통해 제외 매트릭스를 달성하는 가장 좋은 방법
-
06-07-2019 - |
문제
쿼리를 통해이 제외 행렬을 달성하는 가장 좋은 방법은 무엇입니까?
테이블에는 고정 된 수의 제품이 있으며 아이디어는 제품이 고객에게 판매되는 경우 (행으로 표시) 다른 제품 (열)은 아래 규칙 매트릭스를 기반으로 판매되거나 판매되지 않을 수 있습니다. 목표는 주어진 판매 된 제품 코드에 대해 판매 할 수있는 제품 코드를 얻는 것입니다.
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
열을 가로 질러 행으로 준비.
해결책
매트릭스에서 다음과 같은 연관성 테이블로 형식을 변경할 수 있습니까?
표 추가 제품 : SetProductCode 추가 제품 코드
그래서 당신의 테이블은 모양이 될 것입니다
SoldProdCode, Additional ProdCode
MRLSPN, LGP
MRLSDF, LGP
이제 단순히 쿼리를 실행할 수 있습니다
SELECT AdditionalProductCode
FROM AdditionalProducts
WHERE SoldProductcode='MRLSPN'
편집하다
이 접근법의 또 다른 이점은 MRLSPN을 구매하면 특별 할인을 제공하는 경우 10% 할인 된 가격으로 LGP를 받고 MRLSDF를 구매하면 15 $ 할인 될 수 있다는 것입니다. 이 모델을 사용하면 추가 속성을 포함하도록 협회 테이블을 확장 할 수 있습니다. 이것은 귀하의 모델에 적용되거나 적용되지 않을 수 있습니다.
다른 팁
다수의 링크 테이블입니다.
Sold CanBeSold ---- --------- MRLSPN LGP MRLSDF LGP …
, 및 쿼리 :
SELECT CanBeSold
FROM matrix
WHERE Sold = @Product
32 개 이하의 열을 보장 할 수있는 경우 int (32 비트)를 비트 플래그 필드로 사용하여 구현할 수 있습니다. 그러나 다수의 관계는 더 유연 할 것입니다.
다수의 매핑 테이블, ProductCode2ProductCodemapping을 만듭니다
CREATE TABLE ProductCode2ProductCodeMapping
(
ProductCodeId int,
AllowedProductCodeId int
)
이 두 열을 모두 사용하는 복합 기본 키.
그런 다음 모든 제품 및 관련 제품에 대해 행을 삽입하십시오.
그런 다음 간단히 쿼리 :
SELECT AllowedProductCodeId
FROM ProductCode2ProductCodeMapping
WHERE ProductCodeId = @myProductCodeId
제품에 대한 정수 ID가없는 경우 대신 숯 제품 코드를 추가하거나 사용할 수 있습니다 (전자를 선호합니다).