2016-03-04 36 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;