0

私は実際にはプログラマーではないので、プログラミング全般と特に SQL に関する知識は、ここにいる誰よりも少ないです。この質問が簡単かどうかはわかりませんが、どうやって始めればよいか本当にわかりません。だから、私はフォトニクスと呼ばれるこのテーブルを持っています:

ここに画像の説明を入力

結果が次のような新しいテーブルに表示されるように変更したい:

Name        Timestamp   Value
Photonics   1/1/12 0:15 239.04
Photonics   1/1/12 0:30 247.68
Photonics   1/1/12 0:45 253.44
Photonics   1/1/12 1:00 254.88
Photonics   1/1/12 1:15 253.44
Photonics   1/1/12 1:30 239.04
Photonics   1/1/12 1:45 239.04
Photonics   1/1/12 2:00 239.04
Photonics   1/1/12 2:15 239.04
Photonics   1/1/12 2:30 250.56

これは Pivot と呼ばれていると誰かが教えてくれました。私のような初心者にはそのトピックは複雑すぎることがわかりました。

4

1 に答える 1

4

データの列を行に変換するプロセスは、UNPIVOT と呼ばれます。データを UNPIVOT する方法はいくつかあります。

UNION ALL クエリを使用できます。

select 'Photonics' name, dt + cast('12:15 AM' as datetime) timestamp, [12:15 AM] as value
from Photonics
union all
select 'Photonics' name, dt + cast('12:30 AM' as datetime) timestamp, [12:30 AM] as value
from Photonics
union all
select 'Photonics' name, dt + cast('12:45 AM' as datetime) timestamp, [12:45 AM] as value
from Photonics;

SQL Fiddle with Demoを参照してください。

SQL Server 2005 以降では、UNPIVOT 関数を使用できます。

select 'Photonics' name,
  timestamp = dt + cast(timestamp as datetime),
  value
from photonics p
unpivot
(
  value
  for timestamp in ([12:15 AM], [12:30 AM], [12:45 AM], [1:00 AM], [1:15 AM])
) unpiv;

SQL Fiddle with Demoを参照してください。

SQL Server 2008+ の値で CROSS APPLY を使用できます。

select 'Photonics' name,
  timestamp = dt + cast(timestamp as datetime),
  value
from photonics p
cross apply
(
  values
  ('12:15 AM', [12:15 AM]),
  ('12:30 AM', [12:30 AM]),
  ('12:45 AM', [12:45 AM]), 
  ('1:00 AM', [1:00 AM]),
  ('1:15 AM', [1:15 AM])
) c (timestamp, value);

デモで SQL Fiddle を参照してください

于 2013-07-09T23:01:28.090 に答える