2017-03-21 2 views
-2

週の各曜日に行われた合計週売上高の割合を返すSQLクエリを作成する方法。週は月曜日から日曜日とみなされます。 OracleまたはSQLサーバーDBの場合。週の各曜日に行われた合計週売上高の割合を返すSQLクエリの作成方法

enter image description here

アドバンス ベンカテッシュに感謝

+0

あなたがパーセンテージを意味するのですか? – McNets

+0

イメージのデータはレポートではなく、テーブルではなく、テーブルスキーマとは何ですか? – McNets

+0

こんにちは、はい割合とはい、それはレポートです。仮定すると、Item_1 + Item_2は1つの列、つまり総売上です。テーブル名は(db.sales)です。 – Venkatesh

答えて

0

あなたは

select 
     sum ..., iif(datepart(dw,sales_date)=1,datepart(week,sales_date)-1,datepart(week,sales_date)) [WeekNo] 
     from 
    sales 
    group by 
    iif(datepart(dw,sales_date)=1,datepart(week,sales_date)-1,datepart(week,sales_date)) 

テストと説明

declare @date date = '26-march-2017' 

select datepart(week,@date) [sqlweek], -- official sqlweek 
iif(datepart(dw,@date)=1,7,datepart(dw,@date)-1) [DayofWeekM-S], -- day of the week being Monday - Sunday (7) 
iif(datepart(dw,@date)=1,datepart(week,@date)-1,datepart(week,@date)) [NewWeek] -- if day falls on a sunday then -1 week, sql week begins from Sunday 
かかわらず、スクリプトを完了する必要があります、これを試してみてください
2

私は次のデータとの例を設定している:

declare @sales table (item_id int, date_sale datetime, items int); 
insert into @sales values 
(1, '20170101', 5), 
(1, '20170101', 6), 
(1, '20170102', 7), 
(1, '20170102', 4), 
(1, '20170104', 2), 
(1, '20170104', 2), 
(1, '20170105', 1), 
(1, '20170105', 6), 
(1, '20170106', 7), 
(1, '20170107', 5), 
(1, '20170107', 4), 
(1, '20170108', 3), 
(1, '20170108', 2), 
(1, '20170109', 2), 
(1, '20170109', 1), 
(1, '20170110', 2), 
(1, '20170110', 2), 
(1, '20170111', 1); 

合計毎日の項目と週間の合計と割合を計算するためにサブクエリを使用しています。

select  s2.item_id, s2.date_sale, sum(s2.items) as total_items, 
      (select sum(s.items) 
      from @sales s 
      where s.item_id = s2.item_id 
      and datepart(wk, s.date_sale) = datepart(wk, s2.date_sale) 
      group by s.item_id, datepart(wk, s.date_sale)) total_week, 
      (sum(s2.items) * 100.0/(select sum(s.items) 
            from @sales s 
            where s.item_id = s2.item_id 
            and datepart(wk, s.date_sale) = datepart(wk, s2.date_sale) 
            group by s.item_id, datepart(wk, s.date_sale))) as percentage 
from  @sales s2 
group by s2.item_id, s2.date_sale; 

これは、最終的な結果である:割合によって

 
item_id | date_sale   | total_items | total_week | percentage  
------: | :------------------ | ----------: | ---------: | :-------------- 
     1 | 01/01/2017 00:00:00 |   11 |   49 | 22.448979591836 
     1 | 02/01/2017 00:00:00 |   11 |   49 | 22.448979591836 
     1 | 04/01/2017 00:00:00 |   4 |   49 | 8.163265306122 
     1 | 05/01/2017 00:00:00 |   7 |   49 | 14.285714285714 
     1 | 06/01/2017 00:00:00 |   7 |   49 | 14.285714285714 
     1 | 07/01/2017 00:00:00 |   9 |   49 | 18.367346938775 
     1 | 08/01/2017 00:00:00 |   5 |   13 | 38.461538461538 
     1 | 09/01/2017 00:00:00 |   3 |   13 | 23.076923076923 
     1 | 10/01/2017 00:00:00 |   4 |   13 | 30.769230769230 
     1 | 11/01/2017 00:00:00 |   1 |   13 | 7.692307692307 

dbfiddle here