2012-07-18 8 views
1

J'ai un rapport dans lequel je calcule les citations entre les pays et les sous-régions. Maintenant, j'ai un certain nombre de citations où le pays est nul.Facteurs de pondération dans SQL

Table 
Quote Number | Country | Subregion | Quote Count 
12233  | Germany | EMEA  | 100 
2223   | Blank | EMEA  | 3333 
3444   | France | EMEA  | 200 
455454  | Spain | EMEA  | 300 

total Citations Sans pays Null dire égale à 1000, avec 10% liés à l'Allemagne, etc. Ainsi, le facteur de pondération en Allemagne est de 0,1.

Donc au total j'ai 3333 guillemets où le champ de pays est vide. On m'a donc demandé d'obtenir les cotations pour l'EMEA et de distribuer les cotations à travers les pays comme l'Allemagne, l'Espagne, la France et d'autres pays EMEA en utilisant un facteur de pondération basé sur la répartition actuelle des cotations, puis d'ajouter les cotations aux d'autres pays de cette Région comme l'EMEA.

Donc, en ce moment, je suis complètement confus en termes de comment faire cela? Des idées ?

Aide? Quelqu'un ? Étape 1 - Obtenez les facteurs de pondération actuels pour tous les pays de la zone EMEA. En sql?

Étape 2 - Obtenez le nombre de devis pour les devis sans pays attribué pour la région EMEA. En sql? Étape 3 - Prenez des guillemets et ajoutez x nombre de citations à chaque pays en fonction du facteur de pesée. En sql?

+0

Citations Les nombres ajoutés au nombre doivent être des nombres entiers –

Répondre

2

Sur la base des données de votre échantillon:

WITH Factors 
     AS (SELECT Country , 
        SUM([Quote Count]) 
        /CAST((SELECT SUM([Quote Count]) 
          FROM dbo.quotes 
          WHERE Region = q.Region 
            AND Country IS NOT NULL 
          ) AS FLOAT) AS WeightingFactor , 
        q.Region 
      FROM  dbo.quotes q 
      WHERE country IS NOT NULL 
      GROUP BY q.Country , 
        q.Region 
     ) 
SELECT q.country , 
     (SELECT SUM([quote count]) 
      FROM  dbo.quotes 
      WHERE  Country IS NULL 
        AND Region = q.Region 
     ) * f.WeightingFactor + SUM(q.[Quote Count]) AS [Quote Count] 
FROM dbo.quotes q 
     JOIN Factors f ON q.Country = f.Country 
          AND q.Region = f.Region 
WHERE q.Country IS NOT NULL 
GROUP BY q.Country , 
     q.Region , 
     WeightingFactor 
1

Pour obtenir les facteurs de pondération font:

select country, quotecount, 
     quotecount*1.0/sum(quotecount) over (partition by null) as allocp 
from t 
where country <> 'Blank' 

Pour ajouter ces revenir, se joindre au total:

select t.country, t.region, t.quotecount, 
     (t.quotecount + allocp*b.BlankBQ) as AllocatedQC 
from (select country, quotecount, 
      quotecount*1.0/sum(quotecount) over (partition by region) as allocp 
     from t 
     where country <> 'Blank' 
    ) t join 
    (select sum(QuoteCount) as BlankBQ 
     from t 
     where country = 'Blank' 
     group by region 
    ) b 
    on t.region = b.region