2010-11-17 54 views
1

我正在查詢一個基本上是一堆日期的表。如何使用SQL2000支點/不透明

FRECDCUST    DTRECDCUST    DTINSPECTED    DTRECDCUSTPO   DTADDEDSO     DTSHIPPEDSUP     DTQUOTEDCUST 
1/1/1900 12:00:00 AM 7/27/2010 12:00:00 AM 7/30/2010 12:00:00 AM 7/26/2010 12:00:00 AM 8/6/2010 12:00:00 AM 1/1/1900 12:00:00 AM 8/6/2010 12:00:00 AM 
1/1/1900 12:00:00 AM 7/27/2010 12:00:00 AM 7/30/2010 12:00:00 AM 7/26/2010 12:00:00 AM 8/6/2010 12:00:00 AM 1/1/1900 12:00:00 AM 1/1/1900 12:00:00 AM 
1/1/1900 12:00:00 AM 1/1/1900 12:00:00 AM 1/1/1900 12:00:00 AM 1/1/1900 12:00:00 AM 1/1/1900 12:00:00 AM 1/1/1900 12:00:00 AM 1/1/1900 12:00:00 AM 
1/1/1900 12:00:00 AM 1/1/1900 12:00:00 AM 1/1/1900 12:00:00 AM 1/1/1900 12:00:00 AM 1/1/1900 12:00:00 AM 1/1/1900 12:00:00 AM 1/1/1900 12:00:00 AM 
1/1/1900 12:00:00 AM 1/1/1900 12:00:00 AM 1/1/1900 12:00:00 AM 1/1/1900 12:00:00 AM 1/1/1900 12:00:00 AM 1/1/1900 12:00:00 AM 1/1/1900 12:00:00 AM 
1/1/1900 12:00:00 AM 3/12/2010 12:00:00 AM 3/15/2010 12:00:00 AM 3/11/2010 12:00:00 AM 3/16/2010 12:00:00 AM 3/24/2010 12:00:00 AM 4/13/2010 12:00:00 AM 
1/1/1900 12:00:00 AM 11/6/2009 12:00:00 AM 11/6/2009 12:00:00 AM 11/3/2009 12:00:00 AM 11/9/2009 12:00:00 AM 11/20/2009 12:00:00 AM 12/7/2009 12:00:00 AM 

我正在取兩行日期之間的日期差異。例如,要檢查的日子中找到這樣的:

SELECT (CASE 
      WHEN year(SYC_ext.DTRECDCUST) <> 1900 
       AND year(SYC_ext.DTINSPECTED) <> 1900 
      THEN 
      DATEDIFF(dd, SYC_ext.DTRECDCUST, SYC_ext.DTINSPECTED) 
      ELSE 
      NULL 
     END) 
     AS [AverageDaystoInspect] 
Blah blah... 

這將創建最終看起來像這樣的不同則DateDiff calcuations一行:

Product Class Average Days to Inspect Average Days to Process SO Average Days to Ship to Affiliate Average Days to Quote Average Days to Receive Ammended PO 
01 2 4 8 27 21 
01 2 4 8 27 21 
01 3 5 2 88 8 
01 3 5 2 88 8 
01 1 8 11 72 1 
01 3 2 7 27 0 
01 5 2 7 27 0 

請原諒的間距問題。

因此,數據集中的這些行中的每一行都以一個代表產品類別的數字開始,在此情況下爲01,然後進行一系列的日計算。

我可以對這些值進行平均,並給出每個產品類別的每個類別的平均值。但是,他們希望沿着表格或矩陣的左側進行一天的計算,其頂部的產品類別與我在此處的產品類別完全相反。如果我將它們轉換爲Excel,我得到以下內容:

      01 05  10 
Avg Days to Inspect  5  3  5 
Avg Days to Process PO 4  5  5 
Avg Days to Ship   20  18  19 

我希望這是有道理的。任何想法如何在SSRS或t-sql中執行此操作?

+0

會幫助呢? http://msdn.microsoft.com/en-us/library/ms177410.aspx – akonsu 2010-11-17 21:50:52

回答

0

這將做到這一點,假設你可以從你的第一個查詢的數據加載到一箇中間臨時表:

DECLARE @t TABLE 
    (
     ProductClass INT 
    , InspectDays INT 
    , ProcessDays INT 
    , ShipDays INT 
    ) 

INSERT INTO @t 
     SELECT 1 
       , 2 
       , 4 
       , 8 
     UNION ALL 
     SELECT 1 
       , 4 
       , 5 
       , 2 
     UNION ALL 
     SELECT 5 
       , 2 
       , 4 
       , 8 
     UNION ALL 
     SELECT 10 
       , 3 
       , 5 
       , 2 

SELECT 'Avg Inspect' 
     , [01] = AVG(CASE WHEN ProductClass = 1 THEN InspectDays 
        END) 
     , [05] = AVG(CASE WHEN ProductClass = 5 THEN InspectDays 
        END) 
     , [10] = AVG(CASE WHEN ProductClass = 10 THEN InspectDays 
        END) 
FROM @t 
UNION ALL 
SELECT 'Avg Process' 
     , [01] = AVG(CASE WHEN ProductClass = 1 THEN ProcessDays 
        END) 
     , [05] = AVG(CASE WHEN ProductClass = 5 THEN ProcessDays 
        END) 
     , [10] = AVG(CASE WHEN ProductClass = 10 THEN ProcessDays 
        END) 
FROM @t