2010-01-24 6 views
0

J'ai les tableaux suivants:Comment créer vue pour calculer les devises?

Products 
    product, idcurrency, value 
    Prod1  1   5000 
    Prod2  2   3000 
    Prod3  3   2000 

Currrency 
    idcurrency, currencyID 
    1   EUR 
    2   USD 
    3   DKK 

ForexExchange 

    idforexExchange providername, idbaseCurrency, isActive 
     1     XE   Eur   1 
     2     provider2  DKK   1 

ForexRates 
idForexRates idforexExchange, toCurrency, exchangeRate 
    1    1    AED  2.3 
    2    1    EGY  1.3 
    3    1    GBP  2.4 
    4    2    AED  7.3 
    5    3    EGY  6.4 
    6    4    GBP  3.4 

Je veux obtenir tous les produits en dollars USD pour la monnaie active.

-Toutes la monnaie a déposé liée à la table de consultation Currrency -Nous avons la table forexexchange donc si nous avons plusieurs fournisseurs pour les taux de change nous obtenons les taux des devises pour chaque échange selon la devise de base

- la table forexrate enregistrer les taux pour chaque échange

-On peut définir l'échange actif de isActive si ce taux de change table sera utilisé dans le système

Expected Results 
product Value ValueUSD 
prod1 5000 25000 
............... 
+0

pouvez-vous publier des exemples de données pour vos tables? – Pentium10

+0

Product.idcurrency est liée à Currrency.idCurrency? Devrais-je prendre cet identifiant pour rechercher sur ForexRates.idforexExchange ou pour utiliser CurrencyID? –

+2

@Ahmed: J'ai reformaté votre message, mais veuillez éditer votre question et décrire comment vos tables sont liées et ce qu'il faut calculer. Des exemples de données et des résultats attendus pour ces données d'échantillon seront également utiles. –

Répondre

0

Ici, nous aller:

-- sample data, for somebody else start 
CREATE TABLE #Product 
    (Name varchar(50), IdCurrency int, Value decimal(15,2)) 
CREATE TABLE #Currency 
    (IdCurrency int, CurrencyID char(3)) 
CREATE TABLE #ForexExchange 
    (IdForexExchange int, IdBaseCurrency char(3), IsActive bit) 
CREATE TABLE #ForexRates 
    (IdForexRates int, IdForexExchange int, 
     ToCurrency char(3), ExchangeRate decimal(15,2)) 
GO 

INSERT INTO #Product VALUES ('Prod1', 1, 5000) 
INSERT INTO #Product VALUES ('Prod2', 2, 3000) 
INSERT INTO #Product VALUES ('Prod3', 3, 2000) 
INSERT INTO #Currency VALUES (1, 'EUR') 
INSERT INTO #Currency VALUES (2, 'USD') 
INSERT INTO #Currency VALUES (3, 'DKK') 
INSERT INTO #ForexExchange VALUES (1, 'EUR', 1) 
INSERT INTO #ForexExchange VALUES (2, 'DKK', 1) 
INSERT INTO #ForexRates VALUES (1, 1, 'AED', 2.3) 
INSERT INTO #ForexRates VALUES (2, 1, 'EGY', 1.3) 
INSERT INTO #ForexRates VALUES (3, 1, 'GBP', 2.4) 
INSERT INTO #ForexRates VALUES (4, 2, 'AED', 7.3) 
INSERT INTO #ForexRates VALUES (5, 3, 'EGY', 6.4) 
INSERT INTO #ForexRates VALUES (6, 4, 'GBP', 3.4) 
GO 

Et votre déclaration de vue:

SELECT 
    #Product.Name, 
    #Currency.CurrencyID as FromCurrency, 
    #ForexRates.ToCurrency, 
    #ForexRates.ExchangeRate, 
    #Product.Value as OriginalValue, 
    #Product.Value * #ForexRates.ExchangeRate as CalculatedValue 
FROM 
    #Product LEFT JOIN 
    #Currency ON #Product.IdCurrency = #Currency.IdCurrency LEFT JOIN 
    #ForexExchange ON 
     IsActive = 1 AND 
     #Currency.CurrencyID = #ForexExchange.IdBaseCurrency LEFT JOIN 
    #ForexRates ON #ForexExchange.IdForexExchange = #ForexRates.IdForexExchange 
--WHERE 
-- #ForexRates.ToCurrency = 'USD' 

j'ai gardé WHERE l'article commenté que vous n'avez pas monnaie USD pour apparaître. Vous ne devez pas inclure ce filtre dans votre requête, car il peut être réutilisé pour afficher les valeurs de produit dans n'importe quelle devise:

+0

J'ai obtenu votre point – Ahmed

Questions connexes