2010-02-13 82 views
1

我有一個與它有MM關係的貨幣(Rec_ID,貨幣)表它自己導致CurrencyExchangeRate表(Rec_ID,Currency_FK1 AS'FROM',Currency_FK2 AS'TO, Exchange_Rate)如何創建一個查詢來列出所有組合的可能性

現在我需要一個查詢來完成貨幣rec_id(不允許重複), 以及匯率或null的所有組合。如果貨幣中有3條記錄,那麼我查詢應該返回6行。

感謝

回答

0
SELECT 
    CCY1, CCY2, CER.Exchange_Rate 
FROM 
    ( 
    SELECT 
     c1.rec_id AS rec_id1, c1.currency AS CCY1, 
     c2.rec_id AS rec_id2, c2.currency AS CCY2 
    FROM 
     currency c1 
     CROSS JOIN --all combinations... 
     currency c2 
    WHERE 
     c1.rec_id <> c2rec_id -- ...removes same pairs 
    ) foo 
    LEFT JOIN -- ...get matching FX pairs 
    CurrencyExchangeRate CER ON foo.rec_id1 = cer.[from] AND foo.rec_id2 = cer.[to] 
1

如果你想所有組合(即使是那些沒有定義率),然後用自己先加入,然後與利率

SELECT 
    c1.currency AS [From], c2.currency AS [To] , cer.Exchange_Rate 
FROM 
    currency c1 JOIN currency c2 ON c1.rec_id <> c2.rec_id 
    LEFT OUTER JOIN CurrencyExchangeRate cer ON c1.rec_id = cer.[from] 
     AND c2.rec_id = cer.[to]