1

タイムシートというテーブルがあり、1 週間の時間エントリが行として保存されています。例えば:

ID  Start Date  Sun  Mon  Tue  Wed  Thu  Fri  Sat
-------------------------------------------------
1   14-Oct-2012  0    1    1    2    3    5    0

開始日は常に日曜日の日付です。入力条件に基づいて、このデータを複数の行 (日付ごとに 1 行) にエクスポートする必要があります。

たとえば、入力条件が次の場合: 日付が 2012 年 10 月 15 日から 2012 年 10 月 17 日の間である場合、出力は次のようになります。

Date   Hours
------------
15-Oct   1
16-Oct   1
17-Oct   2

SQL Server 2000 を使用しています。方法を教えてください。

4

2 に答える 2

2

SQL Server 2000 にはUNPIVOT関数がないため、 を使用しUNION ALLてこのデータをクエリし、必要な形式で取得できます。

select date, hours
from
(
  select id, startdate date, sun hours
  from yourtable
  union all
  select id, dateadd(dd, 1, startdate), mon
  from yourtable
  union all
  select id, dateadd(dd, 2, startdate), tue
  from yourtable
  union all
  select id, dateadd(dd, 3, startdate), wed
  from yourtable
  union all
  select id, dateadd(dd, 4, startdate), thu
  from yourtable
  union all
  select id, dateadd(dd, 5, startdate), fri
  from yourtable
  union all
  select id, dateadd(dd, 6, startdate), sat
  from yourtable
) x
where date between '2012-10-15' and '2012-10-17'

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

于 2012-10-15T20:33:30.683 に答える
0

これは、テーブル内のすべての列のリストを取得する方法です。

SELECT c.colid, c.name
FROM syscolumns c, sysobjects t
WHERE c.id = t.id
AND t.name = <YOUR_TABLE>
AND t.xtype = 'U'
ORDER BY c.colid;

これをサブクエリとして宣言し、それに結合して、必要な列を出力できます。

于 2012-10-15T20:14:11.407 に答える