我正在尝试使用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
感谢您的帮助。感谢
答案 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;