2015-10-15 40 views
-1

在下表DISTINCT查询账户可以有多个状态值(我不是在这里提供的所有地址字段国家除外场)与Id字段

注:Id字段是varchar类型。

Account \t   Id \t     State 
 
------------------  ------------------ ---------------- 
 
A1000 \t     1000 \t     MI 
 
A1000 \t     1001    \t MI 
 
A1001 \t     1002 \t     CA 
 
A1001 \t     1003 \t     CA 
 
A1002 \t     1004 \t     DE 
 
A1002 \t     1005 \t     PS 
 

 

 
I want to get output like below i.e. distinct of Account,State and its corresponding Top1 Id 
 

 
Account \t   Id \t     State 
 
------------------  ------------------ ---------------- 
 
A1000 \t     1000 \t     MI 
 
A1001 \t     1002 \t     CA 
 
A1002 \t     1004 \t     DE 
 
A1002 \t     1005 \t     PS

至今不能由我自己来形成任何查询。任何人都可以有任何想法如何实现这一点。

+0

哪种类型字段ID? – Galma88

+0

@ Galma88:Id是varchar类型。 – Avijit

回答

0

您可以使用ROW_NUMBER

;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; 
0

你会得到最小的ID是这样的:

select Account, min(Id) as Id, State 
from yourtable 
group by Account, State 
0
select Account, MIN(Id), MIN(State) 
FROM Account 
GROUP BY Account 
0

尝试与此查询:

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;