PO NO Acc No ResultSeqNo A1 12 1 A1 12 1 A1 12 1 A1 12 1 A2 12 2 A2 12 2 A2 12 2 A3 13 1 A3 13 1 A4 13 2 A4 13 2 A5 14 1
在上表中,PONO
和AccNo
是相关的,SeqNo
只是旗帜中的计数器。我需要按PONo
和Accno
进行分组。
如果您在上表中看到,A1
和A2
具有相同的帐号,但所有A1
都被视为一个组,因此所有人的seqNo应为1 A1
。
A2
也与A1
具有相同的acc,但它是一个不同的组,因此它应该具有seq No 2.
换句话说:对于每个AccNo
号码,我需要按PO NO
生成序列号。因此,对于帐户#12,所有A1
PO NO记录都具有序列1,并且所有A2
PO NO记录具有序列2.对于帐户13,A3是1并且A4是2。 / p>
这是我到目前为止所做的:
UPDATE x
SET x.ResultSeqNo = x.dr
FROM
(
SELECT SeqNo,dense_rank() over (order by PO NO) as dr
FROM [Purchaseorder]
WHERE status = 'In'
) x
答案 0 :(得分:1)
您需要使用dense_rank
分析函数,但为分组集添加partition by
子句以生成序列号,如:
SELECT dense_rank() OVER (PARTITION BY acc_no ORDER BY po_no)
答案 1 :(得分:0)
在这里,您需要首先更新resultseqno字段,以便每一行 将被唯一标识。
我使用row_number()窗口函数对分区组中的resultseqno进行了编号
我为该row_number()字段赋予了别名r_num
之后,我使用子查询更新resultseqno
UPDATE [YOUR_TABLE_NAME] x SET ResultSeqNo=rownum;
UPDATE [YOUR_TABLE_NAME] x
SET ResultSeqNo =
(SELECT b.r_num
FROM
(SELECT rownum AS seq_order,
a.*,
row_number() over (partition BY Acc_No order by PO_NO) r_num
FROM [YOUR_TABLE_NAME] a
) b
WHERE x.po_no =b.po_no
AND x.ACC_NO =b.ACC_NO
AND x.ResultSeqNo=b.ResultSeqNo
);