我的表格包含AutoID,Number,Name,City,State,Country等列。
我想要的是在“数字”列中输入的最大数字,其中包含名称,城市,州和国家/地区。
示例:
Name City State Country
Smith NY NY USA
John NY NY USA
John NJ NY USA
现在史密斯应该得到“数字”1,约翰2,再次约翰(新泽西州)1,因为他是新泽西州的第一个。
我可以简单地在查询中放置一个where子句并获取最大数字+ 1.但问题是当我有大量数据并且用户数量增加时,我的查询会非常慢。我也在同一个表中插入数据,以便继续打桩。
我希望我已经清楚了。
Vipul Parekh
答案 0 :(得分:1)
我猜这是你想要的:
Name City State Country Number
Smith NY NY USA 1
John NY NY USA 2
John NJ NY USA 1
这是由row_number()
:
select name, city,state, country,
row_number() over (partition by city, state, country order by (select null)) as Number
from table t;
请注意,群组中Number
的排序是任意的,因为您没有提供id
或createdat
列。不能保证它与表的顺序相同,因为SQL表本质上是无序的。
答案 1 :(得分:0)
您可以在桌面上创建触发器。无论何时插入一行,它都会计算行数并使用count + 1更新最新的行。
要缓慢行事,您可以在名称,城市,州和国家/地区创建索引。
如果您需要示例代码或一些指示,请告诉我。
答案 2 :(得分:0)
您可以使用ROW_NUMBER
SELECT * FROM
(
Select Name,
City,
State,
Country,
Row_Number() over (Partition by City, State, Country ORDER BY Name) AS Number
From table1
) AS T
答案 3 :(得分:0)
1) WITH Optimize_CTE(id,cityid,stateid,countryid) AS
- 定义CTE查询。 (
SELECT id, cityid,stateid, countryid
FROM Optimize
WHERE id IS NOT NULL
)
- 定义引用CTE名称的外部查询。
SELECT id, 将(Varchar(255),cityid)转换为CityId, 将(Varchar(255),stateid)转换为StateId, 将(Varchar(255),countryid)转换为CountryId 来自Optimize_CTE选项(MAXRECURSION 1)
答案 4 :(得分:0)
DECLARE @RowsPerPage INT = 10,@ PageNumber INT = 1
SELECT InvoiceID,CustomerID
FROM dbo.SalesInvoice
ORDER BY InvoiceID
OFFSET(@ PageNumber-1)* @ RowsPerPage ROWS
FETCH NEXT @RowsPerPage仅限行
GO