2017-11-14 4 views
0

必要な提案ガイです。私は自分の質問のタイトルを知らない。私は、この絵のような出力に含まを与える1つのクエリがあります。 output Query1つのクエリからの出力を変更します。

をし、これが私のクエリです:

select to_char(aa.DATE_AWAL, 'dd/mm/yyyy hh24:mi') DATE_AWAL, to_char(aa.DATE_AKHIR, 'dd/mm/yyyy hh24:mi') DATE_AKHIR, 
to_char(aa.DATE_AWAL, 'hh24:mi') TIME_AWAL, to_char(aa.DATE_AKHIR, 'hh24:mi') TIME_AKHIR, 
cc.NAMARUANG,aa.IDMEETING from TMEETING_ROOM aa 
inner join MMEETING_TYPE bb on aa.IDTYPE=bb.IDMEETING 
inner join MMEETING_ROOM cc on aa.IDMEETINGROOM = cc.IDMEETINGROOM 
inner join HR.VWKARYAWAN dd on aa.IDPENGUSUL=dd.IDKARYAWAN 
inner join HR.MLOKASI ee on aa.IDLOKASI = ee.IDLOKASI 
where aa.IS_DELETE IS NULL 
and aa.IDCANCEL IS NULL 
and (
wm_overlaps ( 
wm_period(aa.DATE_AWAL, aa.DATE_AKHIR), 
wm_period(
TO_DATE(TO_CHAR(trunc(sysdate) + 08/24, 'yyyy-mm-dd hh24:mi'), 'yyyy-mm-dd hh24:mi'), 
TO_DATE(TO_CHAR(trunc(sysdate) + 23/24, 'yyyy-mm-dd hh24:mi'), 'yyyy-mm-dd hh24:mi') 
) 
) = 1 
) and aa.idlokasi = 'I' order by cc.NAMARUANG asc, aa.DATE_AWAL asc; 

すべてのボディは、このクエリから作る方法を私に示唆を与えることができます好きなことができますこの絵:example output

私は、Oracle SQLに

注意を使用して初心者だ:時間Aダイナミックです。

+0

"フロントエンド"として何を使用していますか? PHP? C#? SQLが生データを提供した後に、この「ピボット」を実行する方がはるかに簡単です。確かに、標準のSQLクエリからカラーコードを取得するつもりはありません。研究 "**動的なピボット**" –

+0

ところで、誰もここでは再利用可能なデータを取得するために画像から転記する時間がありません。 {{} 'ツールバーボタンを使ってペーストと書式をコピーするだけです(左から4文字追加します) –

答えて

0

ここでは、MySQLで「汎用」ピボット・テーブルを実現する方法の例を示します。

この手法では行番号が必要です(MySQLのv8ではより簡単な方法があります)が、現在は@variablesを使用する必要があります。

次に、各行番号で、max()関数内でcase expressions関数を使用して行を列に「変換」します(条件付き集計)。

必要な列の数を決定する必要があります。サブクエリt内の順序は、データを正常に配置するために重要です。

SQL Fiddle

のMySQL 5.6スキーマのセットアップ

CREATE TABLE YourQueryHere 
    (`id` int, `date_column` datetime, `code_column` varchar(7), `data_for_cells1` varchar(5), `data_for_cells2` varchar(5)) 
; 

INSERT INTO YourQueryHere 
    (`id`, `date_column`, `code_column`, `data_for_cells1`, `data_for_cells2`) 
VALUES 
    (1, '2017-11-14 00:00:00', 'Bintang', '09:00', '10:30'), 
    (2, '2017-11-14 00:00:00', 'Bintang', '11:00', '12:30'), 
    (3, '2017-11-14 00:00:00', 'Bintang', '14:00', '17:00'), 
    (4, '2017-11-14 00:00:00', 'Sapporo', '11:30', '14:00'), 
    (5, '2017-11-14 00:00:00', 'Sapporo', '14:30', '15:00'), 
    (6, '2017-11-14 00:00:00', 'Tiger', '08:00', '09:30'), 
    (7, '2017-11-14 00:00:00', 'Tiger', '11:00', '12:00') 
; 

クエリ1

select 
    code_column 
    , max(case when RowNumber = 1 then concat(data_for_cells1, ' ', data_for_cells2) end) as pivcol1 
    , max(case when RowNumber = 2 then concat(data_for_cells1, ' ', data_for_cells2) end) as pivcol2 
    , max(case when RowNumber = 3 then concat(data_for_cells1, ' ', data_for_cells2) end) as pivcol3 
    , max(case when RowNumber = 4 then concat(data_for_cells1, ' ', data_for_cells2) end) as pivcol4 
from (
     select * 
      , @counter :=IF(@prev=code_column,@counter+1,1)AS RowNumber 
      , @prev := code_column 
     from YourQueryHere 
     cross join (select @counter:=0, @prev:= '') vars 
     order by 
      code_column, date_column 
    ) t 
group by 
    code_column 
order by 
    code_column 

; 

Results

| code_column |  pivcol1 |  pivcol2 |  pivcol3 | pivcol4 | 
|-------------|-------------|-------------|-------------|---------| 
|  Bintang | 09:00 10:30 | 11:00 12:30 | 14:00 17:00 | (null) | 
|  Sapporo | 11:30 14:00 | 14:30 15:00 |  (null) | (null) | 
|  Tiger | 08:00 09:30 | 11:00 12:00 |  (null) | (null) | 
+0

あなたは別の質問をしなければなりません。 SQLの後では、 "フロントエンド"を処理するためにPHPやC#やJavaのようなものを使用しなければならず、それはまったく別の質問です。 –

+0

申し訳ありませんが遅く応答、私は、クエリ
ための方法を発見しましたが、私の出力に含まクエリは、このようなものだった


を使用している場合、今私は、フロントエンドで作成する方法がわからない:
thetimeをthedate || || thetime2 ||部屋||スタート||終わり||
今日 || 08.00 || 10.30 ||ビンタン|| 08.30 || 09.00 ||
今日 || 08.00 || 10.30 ||ビンタン|| 09.00 || 09.30 ||
今日 || 08.00 || 10.30 ||ビンタン|| 09.30 || 10.00 ||
今日 || 08.00 || 10.30 ||ビンタン|| 10.00 || 10.30 ||
など –

関連する問題