Sql server 具有Id字段的不同查询

Sql server 具有Id字段的不同查询,sql-server,Sql Server,在下表中,帐户可以有多个状态值(我在这里不提供除状态字段外的所有地址字段) 注意:Id字段的类型为varchar 帐户Id状态 ------------------ ------------------ ---------------- 1000英里 A1000 1001英里 A1001 1002 CA A1001 1003 CA A1002 1004 DE A1002 1005 PS 我希望得到如下输出,即帐户、状态及其对应的Top1 Id的不同 帐户Id状态 ---------

在下表中,帐户可以有多个状态值(我在这里不提供除状态字段外的所有地址字段)

注意:Id字段的类型为varchar

帐户Id状态
------------------      ------------------  ----------------
1000英里
A1000 1001英里
A1001 1002 CA
A1001 1003 CA
A1002 1004 DE
A1002 1005 PS
我希望得到如下输出,即帐户、状态及其对应的Top1 Id的不同
帐户Id状态
------------------      ------------------  ----------------
1000英里
A1001 1002 CA
A1002 1004 DE

A1002 1005 PS
您可以使用
行号

;WITH CTE AS
(
    SELECT  *,
            RN = ROW_NUMBER() OVER(PARTITION BY Account, [State] ORDER BY Id)
    FROM dbo.YourTable
)
SELECT  Account,
        Id,
        [State]
FROM CTE
WHERE RN = 1;

您将获得最小的id,如下所示:

select Account, min(Id) as Id, State
from yourtable
group by Account, State
尝试此查询:

SELECT  T.Account,
        T.Id,
        T.[State]
FROM (

SELECT  *, RN = ROW_NUMBER() OVER(PARTITION BY Account, [State] ORDER BY Id)
    FROM dbo.YourTable ) AS T
WHERE T.RN = 1;

字段ID是哪种类型?@Galma88:ID是varchar类型。
SELECT  T.Account,
        T.Id,
        T.[State]
FROM (

SELECT  *, RN = ROW_NUMBER() OVER(PARTITION BY Account, [State] ORDER BY Id)
    FROM dbo.YourTable ) AS T
WHERE T.RN = 1;