基于某些 SQL 服务器列的累进数字
Progressive number based on some SQL server columns
我在 SQL Server 2005 中有以下 table(没有我要计算的 GeoCodeNum 列)
+-----------+---------+-------------+----------+------------+------------+
| City | Region | Street | Name | Surname | GeoCodeNum |
+-----------+---------+-------------+----------+------------+------------+
| Sydney | NSW | Wall street | Chris | Red | 1 |
| Sydney | NSW | Wall street | Marc | White | 2 |
| Sydney | NSW | Sea street | Joseph | Orange | 1 |
| Melbourne | VIC | Ocean orad | Jess | Brown | 1 |
| Florence | Tuscany | Wine street | Luca | Rossi | 1 |
| Florence | Tuscany | Wine street | Mario | Verdi | 2 |
| Florence | Tuscany | Wine street | Luigi | Carli | 3 |
| Florence | Tuscany | Beer street | Elena | Sarzetto | 1 |
| Venice | Veneto | Old street | Giovanni | Casagrande | 1 |
| Venice | Veneto | New street | Giuseppe | Giusti | 1 |
+-----------+---------+-------------+----------+------------+------------+
我想根据以下规则生成 GeoCodeNum:
"assig a progressive number to records with the same set of City, Region and Street and". 递增数顺序无所谓.
在示例中,Luca Rossi、Mario Verdi 和 Luigi Carli 都住在佛罗伦萨的 Wine Street,因此他们有 3 个不同的 GeoCode 编号。
乔瓦尼·卡萨甘德 (Giovanni Casagande) 和朱塞佩·朱斯蒂 (Giuseppe Giusti) 都住在威尼斯,但在不同的街道上,所以他们有相同的 GeoCode 号码。
如何自动生成 GeoCodeNum?
我需要每年生成一次结果,但我有将近 100000 条记录。
我不知道如何开始,我已经尝试使用 MS Excel,但没有帮助。
我认为这个结果在您的意料之中
;With cte(City ,Region, Street,Name ,Surname )
AS
(
SELECT 'Sydney' , 'NSW' , 'Wall street' , 'Chris' , 'Red' UNION ALL
SELECT 'Sydney' , 'NSW' , 'Wall street' , 'Marc' , 'White' UNION ALL
SELECT 'Sydney' , 'NSW' , 'Sea street' , 'Joseph' , 'Orange' UNION ALL
SELECT 'Melbourne' , 'VIC' , 'Ocean orad' , 'Jess' , 'Brown' UNION ALL
SELECT 'Florence' , 'Tuscany' , 'Wine street' , 'Luca' , 'Rossi' UNION ALL
SELECT 'Florence' , 'Tuscany' , 'Wine street' , 'Mario' , 'Verdi' UNION ALL
SELECT 'Florence' , 'Tuscany' , 'Wine street' , 'Luigi' , 'Carli' UNION ALL
SELECT 'Florence' , 'Tuscany' , 'Beer street' , 'Elena' , 'Sarzetto' UNION ALL
SELECT 'Venice' , 'Veneto' , 'Old street' , 'Giovanni' , 'Casagrande'UNION ALL
SELECT 'Venice' , 'Veneto' , 'New street' , 'Giuseppe' , 'Giusti'
)
SELECT
City,
Region,
Street,
Name,
Surname,
ROW_NUMBER() OVER (PARTITION BY City, Region, Street ORDER BY Street) AS GeoCodeNum
FROM cte
select *,
row_number() over(partition by City, Region, Street order by Name, Surname) as GeoCodeNum
from yourTable;
Row_number() 首次出现在 SQL Server 2005 中:
Row_Number() function in SQL Server 2005
SELECT city,
region,
street,
NAME,
surname,
Row_number()
OVER (
partition BY city, region, street
ORDER BY NAME ASC) AS GeoCodeNum
FROM customeraddress;
我在 SQL Server 2005 中有以下 table(没有我要计算的 GeoCodeNum 列)
+-----------+---------+-------------+----------+------------+------------+
| City | Region | Street | Name | Surname | GeoCodeNum |
+-----------+---------+-------------+----------+------------+------------+
| Sydney | NSW | Wall street | Chris | Red | 1 |
| Sydney | NSW | Wall street | Marc | White | 2 |
| Sydney | NSW | Sea street | Joseph | Orange | 1 |
| Melbourne | VIC | Ocean orad | Jess | Brown | 1 |
| Florence | Tuscany | Wine street | Luca | Rossi | 1 |
| Florence | Tuscany | Wine street | Mario | Verdi | 2 |
| Florence | Tuscany | Wine street | Luigi | Carli | 3 |
| Florence | Tuscany | Beer street | Elena | Sarzetto | 1 |
| Venice | Veneto | Old street | Giovanni | Casagrande | 1 |
| Venice | Veneto | New street | Giuseppe | Giusti | 1 |
+-----------+---------+-------------+----------+------------+------------+
我想根据以下规则生成 GeoCodeNum: "assig a progressive number to records with the same set of City, Region and Street and". 递增数顺序无所谓.
在示例中,Luca Rossi、Mario Verdi 和 Luigi Carli 都住在佛罗伦萨的 Wine Street,因此他们有 3 个不同的 GeoCode 编号。 乔瓦尼·卡萨甘德 (Giovanni Casagande) 和朱塞佩·朱斯蒂 (Giuseppe Giusti) 都住在威尼斯,但在不同的街道上,所以他们有相同的 GeoCode 号码。
如何自动生成 GeoCodeNum?
我需要每年生成一次结果,但我有将近 100000 条记录。
我不知道如何开始,我已经尝试使用 MS Excel,但没有帮助。
我认为这个结果在您的意料之中
;With cte(City ,Region, Street,Name ,Surname )
AS
(
SELECT 'Sydney' , 'NSW' , 'Wall street' , 'Chris' , 'Red' UNION ALL
SELECT 'Sydney' , 'NSW' , 'Wall street' , 'Marc' , 'White' UNION ALL
SELECT 'Sydney' , 'NSW' , 'Sea street' , 'Joseph' , 'Orange' UNION ALL
SELECT 'Melbourne' , 'VIC' , 'Ocean orad' , 'Jess' , 'Brown' UNION ALL
SELECT 'Florence' , 'Tuscany' , 'Wine street' , 'Luca' , 'Rossi' UNION ALL
SELECT 'Florence' , 'Tuscany' , 'Wine street' , 'Mario' , 'Verdi' UNION ALL
SELECT 'Florence' , 'Tuscany' , 'Wine street' , 'Luigi' , 'Carli' UNION ALL
SELECT 'Florence' , 'Tuscany' , 'Beer street' , 'Elena' , 'Sarzetto' UNION ALL
SELECT 'Venice' , 'Veneto' , 'Old street' , 'Giovanni' , 'Casagrande'UNION ALL
SELECT 'Venice' , 'Veneto' , 'New street' , 'Giuseppe' , 'Giusti'
)
SELECT
City,
Region,
Street,
Name,
Surname,
ROW_NUMBER() OVER (PARTITION BY City, Region, Street ORDER BY Street) AS GeoCodeNum
FROM cte
select *,
row_number() over(partition by City, Region, Street order by Name, Surname) as GeoCodeNum
from yourTable;
Row_number() 首次出现在 SQL Server 2005 中: Row_Number() function in SQL Server 2005
SELECT city,
region,
street,
NAME,
surname,
Row_number()
OVER (
partition BY city, region, street
ORDER BY NAME ASC) AS GeoCodeNum
FROM customeraddress;