2017-06-12 9 views
0

土ナーム平日を表示する方法を私が販売し、店の登録私databse内のテーブルを持っている

テーブルで一日の何の出現がないときの日付構成要素の機能を(ゼロに設定)。その日には売上高がないので、一部の店舗は日曜日に接近している

私は日曜日に(店舗4近いようなものになるだろうクエリの販売

SELECT DATENAME(WEEKDAY, [Data_Hora_Ficheiro_fim]),[Store_id],count([sales_no]) 
    FROM [GPOS].[dbo].[V_Period_stats_with_CAE_GC] 
     group by [Store_id],[Store name],DATEPART(WEEKDAY,[Data_Hora_Ficheiro_fim])DATENAME(WEEKDAY, [Data_Hora_Ficheiro_fim]) 
    order by DATEPART(WEEKDAY, [Data_Hora_Ficheiro_fim]),DATENAME(WEEKDAY, [Data_Hora_Ficheiro_fim]),[Store_id] 

の数を取得するには、次のクエリコードを持っています)

day   Storeid num_sales 
----------|--------|---------- 
Monday  3  90 
Tuesday  3  70 
Wednesday 3  20 
Thursday 3  60 
Friday  3  96 
Saturday 3  98 
Sunday  3  200 
Monday  4  90 
Tuesday  4  70 
Wednesday 4  20 
Thursday 4  60 
Friday  4  96 
Saturday 4  98 

ので、どのような変更、私は出力するために、私のクエリに何をする必要がありますまた、ライン

Sunday 4  0 
が含まれます

ありがとうございます。

答えて

1

平日にクロス参加し、別のstore_idを使って2人のすべての組み合わせを表示することがあります。left joinhttp://rextester.com/JZLF76266

戻り:

+-----------+---------+-----------+ 
| day | storeid | num_sales | 
+-----------+---------+-----------+ 
| Monday |  3 |  90 | 
| Tuesday |  3 |  70 | 
| Wednesday |  3 |  20 | 
| Thursday |  3 |  60 | 
| Friday |  3 |  96 | 
| Saturday |  3 |  98 | 
| Sunday |  3 |  200 | 
| Monday |  4 |  90 | 
| Tuesday |  4 |  70 | 
| Wednesday |  4 |  20 | 
| Thursday |  4 |  60 | 
| Friday |  4 |  96 | 
| Saturday |  4 |  98 | 
| Sunday |  4 |   0 | 
+-----------+---------+-----------+ 

もしあれば最初の部分のためのcommon table expression及び(提供される例のデータのために変更)Table Value Constructor (Transact-SQL)

;with Weekdays as (
    select 
     day=datename(weekday, convert(datetime,t.n)) 
    , s.Store_id 
    from (values(0),(1),(2),(3),(4),(5),(6)) t(n) 
    cross join (
     select distinct Store_id 
     from [gpos].[dbo].[V_Period_stats_with_cae_gc] 
    ) s 
) 
select 
    w.day 
    , w.[Store_id] 
    , count(v.[sales_no]) 
from Weekdays w 
    left join [gpos].[dbo].[V_Period_stats_with_cae_gc] v 
    on w.day = datename(weekday, v.[Data_Hora_Ficheiro_fim]) 
    and w.Store_id = v.Store_id 
group by 
    w.day 
    w.Store_id 
order by 
    w.day 
    , w.Store_id 

rextesterデモを使用

テーブルがあります。store_idはユニークです(例: dbo.Store)それはselect distinct Store_id ...の代替ソースになります。

また、興味のある日付範囲に制限されたカレンダーテーブルを、Store_idと結合して使用することもできます。これにより、datename()関数の代わりに実際のdateデータ型に参加することができ、パフォーマンスが向上します。

番号及びカレンダーテーブル参照:

関連する問題