2015-05-09 48 views
0

所以我在SQL中有點生疏,在這裏真的需要一些幫助 - 很好。MS Access SQL產品組合導出

我有一個基於MS Access的在線商店系統,我需要導出所有可能的產品變體。

我有一個表「VariantTypes」,其中包含所有需要的信息。 它看起來像這樣:

ProductFKID | VariantTypeFKID | VariantValueFKID | Surcharge 

一個產品的數據是這樣的:

2 | 3 | 12 | 0,00 €

2 | 3 | 13 | 39,00 €

2 | 3 | 14 | 39,00 €

2 | 134 | 556 | 0,00 €

2 | 134 | 557 | 90,00 €

2 | 134 | 558 | 90,00 €

現在的新的進口我需要每一個可能的變型的組合,這應該是這樣的:

2 | 3 | 12 | 0,00 € | 134 | 556 | 0,00 €

2 | 3 | 12 | 0,00 € | 134 | 557 | 90,00 €

2 | 3 | 12 | 0,00 € | 134 | 558 | 90,00 €

2 | 3 | 13 | 39,00 € | 134 | 556 | 0,00 €

2 | 3 | 13 | 39,00 € | 134 | 557 | 90,00 €

2 | 3 | 13 | 39,00 € | 134 | 558 | 90,00 €

2 | 3 | 14 | 39,00 € | 134 | 556 | 0,00 €

2 | 3 | 14 | 39,00 € | 134 | 557 | 90,00 €

2 | 3 | 14 | 39,00 € | 134 | 558 | 90,00 €

當然,如果我有3種變異類型的一個產品,它應該工作一樣辦法。這樣做的最好的例子是:

與機身顏色黑色,白色,紅色和大小S,M,L ,我需要一個產品:

黑色 - S |黑 - M |黑 - L |白 - S |白 - M |白 - L |紅 - S | ...

我確定有一個簡單的方法可以解決這個問題,因爲我前一段時間在學校學到了它。我只是不記得如何。

感謝您的幫助提前!

映入眼簾, KaptainEaglu

UPDATE:

我設法創建下面的語句來創建笛卡爾積:

SELECT v1.ProductID,v1.Name,v1.Value ,v1.Surcharge,v2.Name,v2.Value,v2.Surcharge

FROM [smartstore] [DBO]。[smarstorevariants] V1

CROSS JOIN [smartstore] [DBO]。[smarstorevariants] V2

WHERE v1.ProductID = v2.ProductID AND v1.Name!= v2.Name

ORDER BY v1.ProductID遞減

但作爲一個結果,我沒有得到9個作爲組合的結果,但18 如:黑色-S,黑色-M,... 和S-黑色,S-白色,...

我知道,技術上ey是不同的組合,但對於我的商店出口他們是雙重組合。

關於如何解決這個問題的任何想法?

+1

您在詢問*笛卡爾產品*;用CROSS JOIN運算符實現,沒有ON子句。 –

+0

但ms-access不支持交叉連接,afaik? – KaptainEaglu

+0

的「MS-SQL訪問交叉連接」首先谷歌搜索:http://stackoverflow.com/questions/1231676/how-to-use-cross-join-in-access –

回答

0

在Access SQL中更容易:

ProductFKID | VariantTypeFKID | VariantValueFKID |附加費

SELECT DISTINCT 
    v1.ProductFKID, 
    v1.VariantTypeFKID, v1.VariantValueFKID, v1.Surcharge, 
    v2.VariantTypeFKID, v2.VariantValueFKID, v2.Surcharge  
FROM 
    VariantTypes As v1, 
    VariantTypes As v2 
WHERE 
    v1.ProductFKID = v2.ProductFKID 
    AND 
    v1.VariantTypeFKID <> v2.VariantTypeFKID 
ORDER BY 
    v1.ProductFKID Desc