2014-02-26 36 views
0

創建一個從另一個表中的seqential表我有以下表中我的SQL Server數據庫:在SQL Server

Product  Week  Units  Exta units effective  Extra units 
A515  2014-01-11  51   2014-01-25    23.24 
A515  2014-01-11  51   2014-01-11    25.86 
A515  2014-01-18  52   2014-01-25    23.24 
A515  2014-01-18  52   2014-01-11    25.86 
A515  2014-01-25  50   2014-01-25    23.24 
A515  2014-01-25  50   2014-01-11    25.86 
A515  2014-02-01  45   2014-01-25    23.24 
A515  2014-02-01  45   2014-01-11    25.86 

值在weekunits列重複,我不想。重複的記錄應該被刪除。我希望extra units effective列在對應於week列的最早日期開始。 Basicly我想從上面的表格看起來像這樣的一個表,

Product  Week Units  Exta units effective  Extra units 
A515  2014-01-11 51   2014-01-11    25.86 
A515  2014-01-18 52   2014-01-11    25.86 
A515  2014-01-25 50   2014-01-25    23.24 
A515  2014-02-01 45   2014-01-25    23.24 

我想到了從原始表構建查詢的創建表的最後一個表,但我不知道怎麼樣。任何幫助深表感謝。

+0

2014-01-01如何選擇2014-01-25周。該專欄最早的日期是2014-01-11。 –

+0

@GordonLinoff - 我已經把「與周列對應的最早日期」作爲「不早於周列的最早日期」,但我同意這些措辭可以使用一些工作。 –

回答

2

只是一個稍微複雜的使用ROW_NUMBER和CTE似乎是爲了:

;With Ordered as (
    SELECT *,ROW_NUMBER() OVER (PARTITION BY Week,Units 
           ORDER BY 
       CASE WHEN [Exta units effective] >= Week THEN 0 
        ELSE 1 END, 
       [Exta units effective]) as rn 
    FROM [Unknown Table] 
) 
select * from Ordered where rn = 1 

通常這只是一個ORDER BYROW_NUMBER()表達選擇每個WeekUnits combiation的最早日期,但是我發現我們需要排除[Exta units effective]之前的值,因此我已經添加了CASE表達式來將這些表達式過濾到行編號的末尾。

+0

+1。 。 。根據你對問題的解釋是正確的。 (我*做*看看它是如何意味着這一點的。) –

+0

謝謝,我的答案是正確的 –

0

您可以使用row_number()來完成此操作,該操作會在您希望的日期排序的每個組內分配一個連續值。然後,只需選擇第一項:

select product, week, units, extraunitseffective, extraunits 
from (select t.*, 
      row_number() over (partition by product, week order by extraunitseffective) as seqnum 
     from table t 
    ) t 
where seqnum = 1; 
+0

我一開始也這麼想,但他們希望行數在'-01-25'這幾周'-01- 25'和'-02-01'。 –

0

您可以使用此selectinto。像下面這樣的東西應該讓你有:

SELECT 
max(Product) as Product, 
Week, 
Units, 
min([Extra units effective]) as 'Extra units effective', 
max([Extra units]) as 'Extra units' 
INTO Some_Other_Table 
FROM Original_Table 
GROUP BY Week, Units 

您可能需要與select查詢玩了一下,以確保它的返回你真正想要的結果。另外,列名中的空格經常會讓我起來,所以請確保方括號和單引號也是正確的。

+0

鑑於所有樣本行都包含對,其中它們都具有日期爲'2014-01-11'的條目,具有'23.24'的額外單位,並且一個日期爲'2014-01-25'且具有額外單位爲'25.86' ,*和*所有這四個值都出現在所需結果中的事實,應該清楚,min()和nor()都不適用於計算結果。 –