Sql server 具有Id字段的不同查询
在下表中,帐户可以有多个状态值(我在这里不提供除状态字段外的所有地址字段) 注意:Id字段的类型为varcharSql 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状态
------------------ ------------------ ----------------
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;