2014-01-28 33 views
0

我有表格,像AutoID,數字,名稱,城市,州,國家。獲得列數組合的最大數字

我想要的是使用名稱,城市,州和國家組合在「數字」列中輸入的最大數字。

例子:

Name  City  State  Country 
Smith NY  NY   USA 
John  NY  NY  USA 
John  NJ  NY  USA 

現在史密斯應該得到 「數字」 1,2約翰,再次約翰(在新澤西州)1,因爲他是從新澤西州第一。

我可以簡單地把一個地方的查詢子句,並獲得最大數量+ 1。但問題是,當我有大量的數據和用戶數量的增加,我的查詢會很慢。我也將數據插入到同一個表中,以便繼續堆放。

我希望我已經明確自己。

VIPUL Parekh的

+0

施加什麼順序?例如爲什麼'史密斯'在紐約的'約翰'之前? – StuartLC

回答

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的組內的排序是任意的,因爲您不提供idcreatedat列。不能保證它與表的順序相同,因爲SQL表本質上是無序的。

+0

嗨,對不起,有一半信息。提取號碼不是問題。生成它並保存是問題。 –

0

你可以在你的桌子上創建一個觸發器。當你插入一行,將計算行數,並與計一批更新最新的一個+ 1

要解決你的慢度可以創建名稱,城市,州和國家一個指標。

讓我知道你是否需要示例代碼或一些指針。

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 

WORKING FIDDLE

0

1)Optimize_CTE(ID,cityid,STATEID,countryid) AS

- 定義CTE查詢。 (

SELECT id, cityid,stateid, countryid 
FROM Optimize 
WHERE id IS NOT NULL 

- 定義外部查詢引用CTE名稱。

SELECT標識, 轉換(VARCHAR(255),cityid)作爲CityId, 轉換(VARCHAR(255),STATEID)作爲STATEID, 轉換(VARCHAR(255),countryid)作爲CountryId FROM Optimize_CTE OPTION( MAXRECURSION 1)

0

DECLARE @RowsPerPage INT = 10,@PageNumber INT = 1

SELECT InvoiceID,客戶ID

FROM dbo.SalesInvoice

ORDER BY InvoiceID

OFFSET(@的PageNumber-1)* @ RowsPerPage ROWS

FETCH NEXT @RowsPerPage行僅對

GO