1

国とサブリージョン全体で見積もりをカウントするレポートがあります。今、国が null である引用符がいくつかあります。

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

Null のない国は 1000 に等しいと言います。10% はドイツに関連しています。したがって、ドイツの加重係数は 0.1 です。

したがって、合計で、国フィールドが空白の見積もりが 3333 件あります。そのため、私は EMEA の見積もりを取得し、現在の見積もりの​​広がりに基づく加重係数を使用して、ドイツ、スペイン、フランス、その他の EMEA 諸国などの国に見積もりを配布し、見積もりをカウントに追加するように依頼されました。 EMEA のようなその地域の他の国。

現時点では、これを行う方法について完全に混乱していますか? 何か案は ?

ヘルプ ?誰か ?

ステップ 1 - EMEA のすべての国の現在の加重係数を取得します。SQLで?

ステップ 2 - EMEA の国が割り当てられていない見積もりの​​見積もり数を取得します。SQLで?

ステップ 3 - 見積もりを取り、加重係数に基づいて各国に x 個の見積もりを追加します。SQLで?

4

2 に答える 2

2

サンプルのデータに基づいて:

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
于 2012-07-18T16:01:20.830 に答える
1

重み係数を取得するには、次のようにします。

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

これらを再度追加するには、合計を結合します。

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
于 2012-07-18T15:42:52.760 に答える