1

我有一张表说时间表,其中有一周的小时条目存储为一行。例如:

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

开始日期始终是星期日的日期。我需要根据输入条件将此数据导出到多行中,每个日期一行。

例如,如果输入条件是:日期在 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函数,因此您可以使用 aUNION 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 回答