2017-01-31 9 views
0

私は、毎日の「オフピーク時間」の概要を示す一連のSQLデータ結果を持っています。ピーク時のデータを1つのテキスト行に集めて、利用可能な時間を説明する必要があります。複数の行が1列の列に表示される

「 - 11:30 &午後 - 午前8時30分平日午後5時30分と午前10時 - 午後5時30分、週末に」下の

は私の返されたデータセットの例である:

DayOfWeek \t StartTime \t   EndTime 
 
1 \t   08:30:00.0000000 \t 11:30:00.0000000 
 
2 \t   08:30:00.0000000 \t 11:30:00.0000000 
 
3 \t   08:30:00.0000000 \t 11:30:00.0000000 
 
4 \t   08:30:00.0000000 \t 11:30:00.0000000 
 
5 \t   08:30:00.0000000 \t 11:30:00.0000000 
 
6 \t   10:00:00.0000000 \t 17:30:00.0000000 
 
1 \t   14:00:00.0000000 \t 17:30:00.0000000 
 
2 \t   14:00:00.0000000 \t 17:30:00.0000000 
 
3 \t   14:00:00.0000000 \t 17:30:00.0000000 
 
4 \t   14:00:00.0000000 \t 17:30:00.0000000 
 
5 \t   14:00:00.0000000 \t 17:30:00.0000000 
 
7 \t   10:00:00.0000000 \t 17:30:00.0000000

私はこのようなことを考えるのに近いSQLを書いたことはありません。この種の複雑なSQLのやり方を学ぶ上では、参考になるものがあります。

答えて

0

平日/週末をグループ化するCASE文を作成します。その後、それを区別してください。

SELECT distinct 
    CASE WHEN DayOfWeek in (1,7) THEN 'weekend' ELSE 'weekday' END as dow 
    ,starttime, endtime 
    FROM table 

あなたはそれを1行に表示したいと思うので、ピボットを強制します。

SELECT 
    min(CASE WHEN DayOfWeek in (1,7) THEN starttime END) as start_wknd 
    ,min(CASE WHEN DayOfWeek in (1,7) THEN endtime END) as end_wknd 
    ,min(CASE WHEN DayOfWeek not in (1,7) THEN starttime END) as start_wkday 
    ,min(CASE WHEN DayOfWeek not in (1,7) THEN endtime END) as end_wkday 
FROM table 
0

伝統的な方法は、テーブル自体を自己結合することです。 テーブルの問題は、最初の曜日の 秒、または3番目の発生を特定するものがないことです。これを得るには、 にRank()列を追加する必要があります。おそらく、一時的なテーブルを作成すると、この外観がきれいになります。いくつかのSQL言語では、 "Using"句を使用して、このクエリのみにこの一時テーブルを定義できます。

はここでは使用できない場合は、TMP_TABLEが表示されたすべての場所でのランクでサブクエリを繰り返し、「使用」ラフバージョン

Using TMP_TABLE as (select DayOfWeek, StartTime,EndTime,rank() order by 
StartTime partition by dayofweek as Rnk) 
select 
A.DayOfWeek, A.StartTime, A.EndTime, 
     B.StartTime, B.EndTime, 
     C.StartTime, C.EndTime 
from TMP_TABLE A 
inner join TMP_TABLE B on A.DayOfWeek = B.DayOfWeek 
inner join TMP_TABLE C on A.Dayofweek = C.DayOfWeek 
where 
A.Rnk = 1 
and B.Rnk = 2 
and C.Rnk = 3 
; 

です。

関連する問題