2013-01-31 20 views
0

所以我有一個表,在它的基礎是以下結構:加入一個表上本身不同的標準

  • 工單
  • 狀態
  • StatusDate
  • 類型
  • 類別

(還有其他的東西,但我們爲了這個問題而忽略它們)

我正在篩選類型/類別的某個子集,我知道該怎麼做。但我需要出來的是以下

WorkOrder | SubOrder | Type - Category | Min(StatusDate) where Status = Open | Min(StatusDate) where Status = Complete | Calculated Date Difference between the two 

我可以得到一個在時間和沒有問題。羅恩暫時,我剛剛在Excel中瞎搞。然而,我需要將其轉換爲需要開始生成的報表的SQL語句。可能有也可能沒有StatusDate狀態爲Complete(如果SubOrder未在其他地方標記爲完整),並且數據集也需要反映。每個SubOrder可能會多次打開並完成,因此我們只需要第一個(因此Min())我應該如何處理此任務的任何想法? (並且,不允許更改數據結構,OTS軟件,我們不付費更改它)

回答

0

我不確定我是否理解爲什麼您需要將表加入到自己。這聽起來像你只是想

SELECT WorkOrder, 
     SubOrder, 
     Type, 
     Category, 
     min(case when Status = 'Open' 
       then StatusDate 
       else null 
      end) min_open_status_date, 
     min(case when Status = 'Complete' 
       then StatusDate 
       else null 
      end) min_complete_status_date, 
     min(case when Status = 'Complete' 
       then StatusDate 
       else null 
       end) - 
     min(case when Status = 'Open' 
        then StatusDate 
        else null 
       end) 
    FROM table_name 
WHERE <<whatever conditions>> 
GROUP BY WorkOrder, 
      SubOrder, 
      Type, 
      Category 

如果不是你在找什麼,那將是非常有益的編輯您的問題發佈DDL創建表時,DML來填充一些行,並告訴我們確切地說,你想要什麼樣的數據輸出。或者在sqlfiddle.com上創建一個小提琴。否則,我們必須猜測你想要什麼。例如,您說您要計算兩個日期之間的差異,但兩個日期中的一個可能不存在 - 如果沒有關閉日期,是否要使用某個基準日期進行計算?此查詢將返回NULL計算的差異,這可能是也可能不是你想要的。

+0

這實際上已經有了我需要的一切,並且正在完美地完成。唯一的問題我仍然是,無論我如何根據需要限制狀態日期打開狀態來編寫WHERE,它都不起作用。想法? –

+0

@ danielw-msu - 恐怕我不明白你在問什麼。這可能是你需要編輯你的問題的地方,包括DDL和DML,它們可以讓我們在我們的系統上覆制問題(或者在sqlfiddle.com上創建一個小提琴)。向我們展示示例數據,其中我發佈的查詢不符合您的要求。 –

+0

我得到了照顧,我犯了一個愚蠢的錯誤。感謝您所有的幫助。 –