2013-10-25 17 views
0

我有一個帶有下列字段的單一表格。用於在表格內重複行的TSQL

id name   startdate    enddate 
1  u1  2013-01-15 00:00:00.000 2013-01-17 00:00:00.000 
2  u2 2013-01-22 00:00:00.000   2013-01-23 00:00:00.000 
3  u3 2013-01-23 00:00:00.000   2013-01-23 00:00:00.000 

現在,我想多行取決於開始和結束日期。所以根據上面的行..它返回三行第一個記錄..日期15至17返回3行(3天)。

我有點困惑的查詢。有沒有更好的方法或任何樣本來實現?

謝謝。

+0

任何幫助嗎?我不確定這個問題是否應該降低評分..?它的有效邏輯問題。 –

+0

我沒有downvote,可能是因爲你沒有顯示任何努力。你需要通過Id過濾結果嗎? – Kaf

+0

@Kaf謝謝..下面是我所嘗試過的..如果你有或者你可以做,你可以給你不同的答案! –

回答

2

你可以使用一個CTE來解決:

DECLARE @Id int 
SELECT @Id = 1 
; 

WITH Multiple AS 
(
     SELECT 1 Sequence, Id, Name, StartDate, EndDate 
     FROM (  VALUES 
       (1, 'u1', '2013-01-15', '2013-01-17'), 
       (2, 'u2', '2013-01-22', '2013-01-23'), 
       (3, 'u3', '2013-01-23', '2013-01-23') 
     )  AS Sample(Id, Name, StartDate, EndDate) 
     WHERE Id = @Id 
     UNION ALL 
     SELECT Sequence + 1, Id, Name, StartDate, EndDate 
     FROM Multiple 
     WHERE Id = @Id AND DATEADD(d, Sequence, StartDate) <= EndDate 
) 
SELECT * 
FROM Multiple 
+0

謝謝..下面是我試過的.. –

0

如果您有一個'日期'表,其中包含'日期'列,只需將您的表加入'DATE.DATE BETWEEN startdate AND enddate'中的'日期'即可。

0

我不是很確定,但下面是我曾嘗試..

SELECT c1.* 
FROM master..spt_values p 
    INNER JOIN tempQuery c1 
     ON RIGHT(CAST(c1.stdate AS DATE),2) <= (CASE WHEN p.number = 0 THEN 1 ELSE p.number END) 
WHERE TYPE='p' 
AND p.number BETWEEN RIGHT(CAST(c1.stdate AS DATE),2) AND RIGHT(CAST(c1.endate AS DATE),2)