2017-03-03 18 views
2

SQL Serverでのを計算しようとしています。問題を扱う質問がたくさんあることは承知していますが、私はGROUP BY集計ファンクション sum()とavg()のような多くの他の列を照会するという追加の問題があります。私はまったく同じWHERE句でINNER JOINを使用することが可能かもしれないと仮定SQL Server:加重平均+ GROUP BY

SELECT 
    AVG(tauftr.kalkek) AS 'PurchPrice', 
    SUM(tauftr.amount) AS 'Amount', 
    AVG(tauftr.price) AS 'SellingPrice', 
    tauftr.product AS 'Product', 
    auftrkopf.ins_usr AS 'Seller', 
    DATEPART(wk, auftrkopf.date) AS 'Week', 
    AVG([margin]) AS 'Margin' /* <--- THIS IS WRONG */ 
    /* CALCULATE HERE: WEIGHTED AVERAGE BETWEEN 'amount' and 'margin' */ 
FROM 
    [tauftr] AS tauftr 
JOIN 
    tauftrkopf AS auftrkopf ON tauftr.linktauftrkopf = auftrkopf.kopfnr 
WHERE 
    auftrkopf.[status] = 'L' 
    AND auftrkopf.typ = 'B' 
    AND auftrkopf.date >= '01.03.2017' 
    AND auftrkopf.ins_usr ='HS' 
GROUP BY 
    tauftr.product, auftrkopf.ins_usr, DATEPART(wk,auftrkopf.date) 

が、私は、クエリを2回実行する必要はありません:

は、ここに私のクエリです。そして、私はどんなフィールドに参加するかわからない...

テーブルを作成せずに可能ですか? ...

答えて

7

と仮定すると、あなたは平均マージンを秤量したい

Select 
     ... 
     sum(amount*margin)/sum(amount) as 'Weighted Avg' 
     ... 
From ... 
Group By ... 

編集を(私が書き込み権限を持っていない) - 恐ろしいゼロ除算

case when sum(amount)=0 then null else sum(amount*margin)/sum(amount) end as 'Weighted Avg' 
を避けるために
+0

いいね!私は彼が体重として使いたいものを見つけようとしていました。 – SqlZim

+0

@SqlZimジュリーはまだ出ている、OPは合計WAMを探している可能性があります。 –

+0

場合によっては、簡単な解決策が表示されません。 ありがとうございます! – Harper