用于将列转换为行的SQL查询

时间:2012-10-15 20:05:15

标签: sql sql-server-2000

我有一张表说Timesheet,它有一个星期的小时条目存储为一行。例如:

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,请建议我。

2 个答案:

答案 0 :(得分: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 With Demo

答案 1 :(得分: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;

您可以将其声明为子查询并加入其中并输出您想要的任何列。