簡體   English   中英

如何更改我的 T-SQL 查詢中的行號行為?

[英]How to change the Row Number behavior in my T-SQL Query?

我正在使用 SQL Server 2014 並且我對表 (tbl1) 運行以下 T-SQL 查詢。

tbl1 的提取物:

emp_code     Name     Address   Company
---------------------------------------
100          Peter    London     ABC
125          Allan    Cambridge  DCE
125          Allan    Cambridge  DCE
115          John     Suffolk    ABC
115          John     Suffolk    XYZ
154          Mary     Highlands  ABC
154          Mary     Bristol    ABC
124          Mary     Chester    ABC

我的 T-SQL 查詢如下:

SELECT
    [ID],
    [Name],
    [Address],
    [Company],
    ROW_NUMBER() OVER (PARTITION BY [emp_code] ORDER BY [Address]) AS RowNumber
FROM
    [tbl1]

Output 來自上述查詢:

emp_code         Name     Address   Company    RowNumber
--------------------------------------------------------
    100          Peter    London     ABC          1
    125          Allan    Cambridge  DCE          1
    125          Allan    Cambridge  DCE          2
    115          John     Suffolk    ABC          1
    115          John     Suffolk    XYZ          2
    154          Mary     Highlands  ABC          1
    154          Mary     Bristol    ABC          2 
    154          Mary     Chester    ABC          3

Output 我追求:

emp_code         Name     Address   Company    RowNumber
---------------------------------------------------------
    100          Peter    London     ABC          1
    125          Allan    Cambridge  DCE          1
    125          Allan    Cambridge  DCE          1
    115          John     Suffolk    ABC          1
    115          John     Suffolk    XYZ          1
    154          Mary     Highlands  ABC          1
    154          Mary     Bristol    ABC          2 
    154          Mary     Chester    ABC          3

我希望根據每個[emp_code][Address]列更改我的 RowNumber(或根據需要更改列名)。 如果員工具有相同的地址,則它應該具有相同的值(即 1)。 否則,它應該像員工“Mary”一樣給出值(在輸出上方)。

我假設Row_Number() function 不是用於我所追求的正確的。

任何幫助,將不勝感激。

我認為您希望在這里DENSE_RANK而不是ROW_NUMBER()

SELECT [ID], [Name], [Address], [Company],
       DENSE_RANK() OVER (PARTITION BY [emp_code] 
                          ORDER BY [Address]) AS DenseRank
FROM [tbl1];

下面演示鏈接的屏幕截圖

演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM