用于计算Y记录的X的SQL脚本

时间:2016-03-04 21:09:51

标签: sql sql-server

我正在尝试使用Y计数的X来索引我的记录但是有一些问题。这是一个例子:

表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和ColY的脚本。 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

感谢您的帮助。感谢

2 个答案:

答案 0 :(得分:3)

您正在寻找窗口功能。对于您提供的示例:

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

答案 1 :(得分:1)

以下是使用Cross Apply的另一种方法,但任何一天我都会选择Gordan的解决方案

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;