2013-10-30 79 views
0

我有列日期和順序的表。我想將一個名爲Batch的列添加到此表中,該列將填充如下:對於每個日期,我們從第一個訂單開始,並將每個兩個訂單分組在一個批次中。值分配給一列基於其他列的值在同一個表

這意味着對於本例中的Date = 1的記錄(前4條記錄),前兩條記錄(Order = 10和Order = 30)將具有批號:Batch = 1,接下來的兩條記錄訂單= 80和訂單= 110)將具有批= 2,依此類推。

如果最後剩餘記錄的數量小於批量大小(本例中爲2),則 剩餘訂單將具有單獨的批次編號,如下例所示:編號與日期記錄= 2爲奇數,那麼最後一個記錄(5條記錄)將有批量= 3

Date Order 
----------- 
1  10 

1  30 

1  80 

1  110 

2  20 

2  30 

2  50 

2  70 

2  120 

3  90 

Date Order Batch 
------------------ 
1  10  1 

1  30  1 

1  80  2 

1  110 2 

2  20  1 

2  30  1 

2  50  2 

2  70  2 

2  120 3 

3  90  1 

回答

2

使用解析函數ROW_NUMBER獲得的行數1,2,3,...中的每個日期。然後添加一個和除以2:

select 
    dateid, 
    orderid, 
    trunc((row_number() over (partition by dateid order by orderid) +1)/2) as batch 
from mytable; 
+0

感謝。有用。 – Matin

+0

對不起,最基本的問題。爲什麼會出現,當我運行此查詢「單行子查詢返回多個行」的錯誤消息?'更新mytable的組批=(選擇 TRUNC((ROW_NUMBER()OVER(由訂單id dateid順序分區)+1)/2)from mytable'); – Matin

+0

因爲您在內部查詢中選擇了該表的所有記錄。您只想爲每個更新記錄選擇一條記錄。您需要在內部選擇中將where子句限制爲更新記錄的關鍵字。 –

相關問題