2017-06-01 19 views
-1

は、以下の問題を解決するには、SQLクエリとが必要です:SQL合計の売上高は

入力テーブルがあるプロダクトID、カラムは開始と終了週のコラムがある一方で、ユニークであるウィーク・販売特定の週の売上を合計したい範囲に基づいています。

input table

入力テーブルから、私たちは週とともにプロダクトIDを抽出し、開始週と最終週の範囲の間で週に基づいて売上の合計を取得したいです。

各製品IDと週に対する売上値は、入力テーブルのその製品と週の組み合わせに対応する開始週と終了週に基づく売上の合計です。私は自己をやろうとした

output table

は、入力テーブルに参加するが、私は客観的に無効になります両方のプロダクトIDと週に参加する必要があるとして、それは動作しません実現しました。

Select a.Product ID, a.Week, Sum(a.Sales) 
from Input as a, Input as b 
    where a.Product ID = b.Product ID 
    and a.Week between b.Start Week and b.End Week 
group by 1,2 
+0

[OK]を、実際の質問は何ですか?あなたはあなたの質問にどんな問題がありますか? *あなたの質問は何ですか? –

+0

私は入力テーブルで自己結合を試みていましたが、目標を無効にするProduct IDとWeekの両方に参加する必要があるため、機能しないことに気付きました。 a.Product ID、a.Week、a.Seeksを入力としてaからaを入力bと入力a.Product ID = b.Product IDグループby 1,2 –

答えて

0

私はサブクエリ夢中ないんだけど、それは少なくともあなたが始める必要があります。

SELECT 
    a.ProductID, 
    a.Week, 
    (
    SELECT 
     SUM(b.Sales) 
    FROM 
     Table b 
    WHERE 
     b.ProductID = a.ProductID AND 
     b.Week BETWEEN a.StartWeek AND a.EndWeek 
) as CumulativeSales 
FROM 
    Table a 
+0

Alecに感謝しますが、行う方法がありますそれはサブクエリを使用しないで? –

2

あなただけの外部結合に切り替える必要があります。

Select a.Product ID, a.Week, Sum(a.Sales) 
from Input as a LEFT JOIN Input as b 
    ON a.Product ID = b.Product ID 
and a.Week between b.Start Week and b.End Week 
group by 1,2 

これは、Alecのサブクエリよりも良い計画になるはずです。

関連する問題