2016-03-04 51 views
0

我正嘗試使用Y計數的X索引我的記錄,但有一些問題。這裏有一個例子:用於記錄Y記錄X的SQL腳本

表A

BOL# PalletID Shipper ColX ColY 
12 3600  FDX 
12 3601  FDX 
12 3602  FDX 
12 3603  FDX 
13 3604  FDX 
13 3605  FDX 
13 3606  FDX 

我需要一個腳本,將填充COLX和科利。 ColX應該是順序計數並且通過BOL#中斷。 ColY也應該是BOL的ColX中斷的最大值。

結果應該是這樣的:

BOL# PalletID Shipper ColX ColY 
12 3600  FDX  1  4 
12 3601  FDX  2  4 
12 3602  FDX  3  4 
12 3603  FDX  4  4 
13 3604  FDX  1  3 
13 3605  FDX  2  3 
13 3606  FDX  3  3 

感謝你的幫助。謝謝

回答

3

您正在尋找窗口功能。對於例如,你提供:

select t.*, 
     row_number() over (partition by bol order by palletid) as colx, 
     count(*) over (partition by bol) as coly 
from tablea t; 
+0

這是快速週轉。你擊敗了我的解決方案。 – Steven

+0

哇...你們真棒!驗證工作。謝謝!!!! – user3353176

1

這裏是另一種方式利用跨應用做到這一點,但是,任何一天,我會選擇戈爾丹的解決方案

select t.*, 
     row_number() over (partition by bol order by palletid) as colx, 
     cs.coly 
from tablea t; 
CROSS APPLY 
(SELECT COUNT(1) from tablea where a.bol = b.bol) cs (coly) 

或使用Correlated Sub-Query

select t.*, 
     row_number() over (partition by bol order by palletid) as colx, 
     (SELECT COUNT(1) from tablea where a.bol = b.bol) as coly 
from tablea t;