SQL 服务器 ROW_NUMBER() OVER(PARTITION 问题
SQL server ROW_NUMBER() OVER(PARTITION issue
我有一个 table 名为 SavingsMaster。下面是示例输出。
+--------+------------------+-------+
| CustNo | AccountNo | Cycle |
+--------+------------------+-------+
| 1 | 48SVAS1521144100 | |
| 2 | 21SVSV1300854500 | |
| 2 | 21SVAS1308476900 | |
| 1 | 48SVAS1411737700 | |
+--------+------------------+-------+
如您所见,两位客户都有唯一的帐号。我的要求是通过 CustNo, AccountNo.
更新 Cycle 列组
我可以使用下面的 select 查询,但我无法在更新子句中使用它。
SELECT CustNo, AccountNo,
ROW_NUMBER() OVER(PARTITION BY CustNo ORDER BY AccountNo) as RowNumber
FROM SavingsMaster
寻求您的帮助以编写更新声明。
非常感谢...
如果您想要序列号,那么您可以使用可更新的 CTE 来实现:
WITH toupdate AS (
SELECT CustNo, AccountNo,
ROW_NUMBER() OVER (PARTITION BY CustNo ORDER BY AccountNo) as RowNumber
FROM SavingsMaster
)
UPDATE toupdate
SET cycle = RowNumber;
试试这个方法:
UPDATE SavingsMaster
SET Cycle=T1.RowNumber
FROM
(SELECT CustNo, AccountNo, ROW_NUMBER() OVER(PARTITION BY CustNo ORDER BY AccountNo) as 'RowNumber'
FROM SavingsMaster) as T1 JOIN
SavingsMaster S ON S.CustNo=T1.CustNo AND S.AccountNo=T1.AccountNo
我有一个 table 名为 SavingsMaster。下面是示例输出。
+--------+------------------+-------+
| CustNo | AccountNo | Cycle |
+--------+------------------+-------+
| 1 | 48SVAS1521144100 | |
| 2 | 21SVSV1300854500 | |
| 2 | 21SVAS1308476900 | |
| 1 | 48SVAS1411737700 | |
+--------+------------------+-------+
如您所见,两位客户都有唯一的帐号。我的要求是通过 CustNo, AccountNo.
更新 Cycle 列组我可以使用下面的 select 查询,但我无法在更新子句中使用它。
SELECT CustNo, AccountNo,
ROW_NUMBER() OVER(PARTITION BY CustNo ORDER BY AccountNo) as RowNumber
FROM SavingsMaster
寻求您的帮助以编写更新声明。
非常感谢...
如果您想要序列号,那么您可以使用可更新的 CTE 来实现:
WITH toupdate AS (
SELECT CustNo, AccountNo,
ROW_NUMBER() OVER (PARTITION BY CustNo ORDER BY AccountNo) as RowNumber
FROM SavingsMaster
)
UPDATE toupdate
SET cycle = RowNumber;
试试这个方法:
UPDATE SavingsMaster
SET Cycle=T1.RowNumber
FROM
(SELECT CustNo, AccountNo, ROW_NUMBER() OVER(PARTITION BY CustNo ORDER BY AccountNo) as 'RowNumber'
FROM SavingsMaster) as T1 JOIN
SavingsMaster S ON S.CustNo=T1.CustNo AND S.AccountNo=T1.AccountNo