2011-05-16 219 views
0

使用SQL Server 2008(R2)幫助!無法獲得結果所需

我有一個結果集,我需要以不同的方式顯示,這是目前這樣的:

Resource Nr Cost StartDate EndDate 
Cable_5m 8 3.5 12/03/2011 13/03/2011 
Cable_5m 2 3.5 13/03/2011 14/03/2011 
Rope125A 1 0 16/03/2011 18/03/2011 
Rope125A 1 0 17/03/2011 17/03/2011 

我需要的是根據日期多少每個資源的報告被髮送,如下圖所示:

DateOfEvnt Resource Nr Cost 
2011-03-12 Cable_5m 8 3.50 
2011-03-13 Cable_5m 10 3.50 
2011-03-14 Cable_5m 2 3.50 
2011-03-16 Rope125A 1 0.00 
2011-03-17 Rope125A 2 0.00 
2011-03-18 Rope125A 1 0.00 

我已經看過轉動,但不能爲我的生命得到它的工作,我不知道支點是什麼,我需要。所有的幫助將感激地收到。

回答

1

對於給定和輸出,您根本不需要PIVOT。簡單的UNIONGROUP BY就足夠了。

測試數據

DECLARE @Resources TABLE (
    Resource VARCHAR(32) 
    , Nr INTEGER 
    , Cost FLOAT 
    , StartDate DATE 
    , EndDate DATE 
) 

INSERT INTO @Resources 
    SELECT 'Cable_5m', 8, 3.5, '03/12/2011', '03/13/2011' 
    UNION ALL SELECT 'Cable_5m', 2, 3.5, '03/13/2011', '03/14/2011' 
    UNION ALL SELECT 'Rope125A', 1, 0, '03/16/2011', '03/18/2011' 
    UNION ALL SELECT 'Rope125A', 1, 0, '03/17/2011', '03/17/2011' 

SQL語句

SELECT DateOfEvnt 
     , Resource 
     , Nr = SUM(Nr) 
     , Cost  
FROM (   
      SELECT Resource 
        , Nr 
        , Cost 
        , [DateOfEvnt] = StartDate 
      FROM @Resources 
      UNION ALL  
      SELECT Resource 
        , Nr 
        , Cost 
        , [DateOfEvnt] = EndDate 
      FROM @Resources 
     ) r   
GROUP BY 
     Resource 
     , Cost 
     , DateOfEvnt 

編輯
雖然UNIONGROUP BY滿足的結果,我開始懷疑你是更需要像這樣的東西在WITH聲明返回Start-EndDate之間每天的記錄。

;WITH q AS (
    SELECT Resource 
      , Nr 
      , Cost 
      , StartDate 
      , DateOfEvnt = StartDate    
    FROM @Resources 
    UNION ALL 
    SELECT q.Resource 
      , q.Nr 
      , q.Cost 
      , q.StartDate 
      , DATEADD(day, 1, q.DateOfEvnt)   
    FROM q 
      INNER JOIN @Resources s ON s.Resource = q.Resource 
             AND s.Nr = q.Nr 
             AND s.StartDate = q.StartDate 
    WHERE q.DateOfEvnt < s.EndDate 
) 
SELECT DateOfEvnt 
     , Resource 
     , Nr = SUM(Nr) 
     , Cost 
FROM q 
GROUP BY 
     DateOfEvnt 
     , Resource 
     , Cost 
+0

那17日不會給2xRope125A嗎? – 2011-05-16 08:51:46

+0

@Damien - 是的。你是否複製粘貼腳本並得到不同的結果?第二版的 – 2011-05-16 08:58:16

+1

+1。第一個版本確實給出了這個樣本數據的正確結果,但這是因爲第17行的Rope125A對第三行計數了兩次。一次用於StartDate,一次用於EndDate,不是因爲重疊。 – 2011-05-16 09:17:01