2010-12-11 16 views
1

すべての顧客と2009年の毎月について、毎月の前、毎月、顧客と月のリストを表示します。ここでは、毎月の平均購入数はその月の前の平均購入数です。それが表示されるはずです何のavg()、1ヶ月前、および1ヶ月後にクエリを作成するための支援

例:

name   month avgBefore avgAfter   
P.Anderson  3   13   35 

(名前、コード、月、avgAmount)(名前を表示するリストを含むビューV1を作成するために、比較的容易である一方、私の問題は、あります、毎月の平均購入数)、私は残りの作業(毎月の前/後に平均を計算する)を行う方法を知らない(またはむしろ想像できません)。

例:avereagebefore月3 = SUM(月1から3までのすべての平均)、avereageAfter月3 =合計(最大3〜すべてのAVG(月)

は、誰かが私を助けてくださいすることができ

例:ビューV1は、私が(S作成した12のビューなど)ビューの各月を分離しようとした

SELECT  
    c.name, c.code, 
    MONTH(t.DateTime) AS minas, 
    AVG(t.charged_amount) AS total 
FROM 
    dbo.customers AS c 
INNER JOIN 
    dbo.accounts AS a ON c.code = a.customer_code 
INNER JOIN 
    dbo.creditcard AS cc ON a.acc_number = cc.acc_number 
INNER JOIN 
    dbo.transactions AS t ON cc.cc_number = t.cc_number 
INNER JOIN 
    dbo.shop AS s ON t.shop_code = s.shop_code 
WHERE 
    (YEAR(t.DateTime) = 2009) 
GROUP BY 
    c.name, c.code, MONTH(t.DateTime) 

(あなたはManagement Studioでビューを編集するときに示すように)このようなものです:

create view [Dec](name, code, minas, averg) 
as 
    select * from v1 
    where minas = 12 

、その後は、このでした:

select 
    v1.name, v1.code, v1.minas, sum(total) 
from 
    v1, Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, [Dec] 
where 
    v1.minas <= Jan.minas or v1.minas <= Feb.minas or 
    v1.minas <= Mar.minas or v1.minas <= Apr.minas or 
    v1.minas <= May.minas or v1.minas <= Jun.minas or 
    v1.minas <= Jul.minas or v1.minas <= Aug.minas or 
    v1.minas <= Sep.minas or v1.minas <= Oct.minas or 
    v1.minas <= Nov.minas or v1.minas <= [Dec].minas 
group by 
    v1.name,v1.code,v1.minas 

をそれはうまくいきませんでした。

私が試したテストのためにも

select 
    v1.name, v1.code, v1.minas, sum(v1.total) 
from 
    v1, Jan as v2, Feb as v3 
where 
    v1.code = v2.code and v1.code = v3.code 
group by 
    v1.name, v1.code, v1.minas 

が、結果は月2で

Nelson J. Arredondo 100606 1 75 
Nelson J. Arredondo 100606 2 100 
Nelson J. Arredondo 100606 5 250 

だった、それは175と月の5 250 + 175

ことができますされている必要がありますあなたは私がこれを理解するのを手伝ってください?

+0

SQLを実行する前に、統計的背景を最も明確にすると思います。 3ヶ月前のavereage =合計(すべて1月から3月の平均)。 1)恐らくここで誤解を招く名前を選んで、3月を除外し、ここでモンティセ1と2を使用します。 2)平均値の和だけを使用しても似ているわけではありません。私は少なくとも2で割り切っています。そして、実践では、以前の範囲のavarageを使用します。 –

+0

上記はクエリが返さなければならないものの一例です。 ActualluビューV1は、毎月、各顧客、平均購入を持っています。また、私が前にしようとしたことは、前の月の各顧客のすべての平均を合計することでした。 2月にNelson J. Arredondoが1月と1月に75を平均購入したと言うことができます。その後、2月前の平均購入額は75、2月以降は175でした。5月と同じように、マット前の平均購入額は75 + 100 = 175です。 after mayは75 + 100 + 250 = 375です – George

答えて

0

各行の平均値を1行で評価し、UNPIVOT(SQL Server 2005以降が必要)を使用して、これを1か月あたり1行のユーザーと希望の形式に変換します。

関連する問題