2012-10-15 152 views
1

我有一個表格,表示Timesheet,它有一個一週的時間條目存儲爲一行。例如:將列轉換爲行的SQL查詢

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

開始日期始終是星期日的日期。 我需要根據輸入條件將這些數據導出到多個行中,每個日期一行。

例如,如果輸入的標準是:日期是10月17日2012年10月15日 - 2012年間,我的輸出應該是這樣的:

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

我使用SQL Server 2000中,請給我一個方法。

+4

參見[透視使用SQL Server 2000](http://stackoverflow.com/questions/312861/pivot-using-sql-server-2000) – Spevy

回答

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

+0

這工作就像一個魅力!非常感謝! :) – Paramesh

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; 

你可以聲明,作爲一個子查詢,並加入到它和輸出任何你想要的colums。