2017-01-25 19 views
-3

データ、qtyおよび時間を返すクエリがあります。それは年を通してすべての売上の合計です。私は忙しい時代のGoogleのようなものを達成しようとしています。私が苦労しているのは、時間を注文することです。私は0-24を望んでいない、私が望むのは06-05です。開始時刻は朝6時であり、終了時刻は朝5時です。 のようなものでした。その後、売上高に分類されます。SQL開始時間で注文する時間時間

これをsaletimeでオーダーし、0,1,2,3,4時間などを取得しますが、開始時間を6時間から開始することもできます。

誰でも手伝ってください。

+0

クエリ – bc004346

+0

を提供してください私は、コードスニペットに基づいて、SQL Serverのを追加しました。 –

+0

'Datepart(hh、saletime)> = @ Varの場合はDatepart(hh、saletime) - @ var else Datepart(hh、saletime)24- @ VAR end'で渡されます。 – xQbert

答えて

2

あなたがここ6

前に、何にでも24時間を追加CASEステートメントを実行して、独自のソート順を宣言することができますが、それは実際にやっているかを見ることができますので、私は列としてそれを含めました:

SELECT 
    Sum(Qty) as [Sum], 
    Datepart(hour, saletime) AS [Hour], 
    CASE 
     WHEN Datepart(hour, saletime) >= 6 THEN Datepart(hour, saletime) 
     ELSE Datepart(hour, saletime) + 24 
    END AS [SortOrder] 
FROM 
    MyTable 
ORDER BY 
    SortOrder 

出力:

Sum Hour  SortOrder 
2  6  6 
3  7  7 
17  8  8 
--  --  -- Skipping rows for brevity 
18  3  27 
13  4  28 
2  5  29 

しかし、あなたは、カラムとしてSortOrderをしたくない場合は、単にORDER BY代わりにそれを移動:

SELECT 
    Sum(Qty) as [Sum], 
    Datepart(hour, saletime) AS [Hour] 
FROM 
    MyTable 
ORDER BY 
    CASE 
     WHEN Datepart(hour, saletime) >= 6 THEN Datepart(hour, saletime) 
     ELSE Datepart(hour, saletime) + 24 
    END 

EDIT:質問自体にAaron Bertrand's毎のコメント、私は私のクエリを更新しましたhhの代わりにhourを使用してください。彼が提供したリソースはseen hereです。

+0

これは完璧でした。私は離れてではなく、あなたは順序でCASEを使うことができました。 –

0

あなたはソートするモジュラ式を使用することができます。

select sum(qty), datepart(hour, saletime) 
from sales 
group by datepart(hour, saletime) 
order by (datepart(hour, saletime) + 19) % 24 
関連する問題