繁体   English   中英

根据1列为每个人选择唯一记录

[英]Select unique record for each person based on 1 column

我有这样的数据。 有时有2条记录,其中1条带有邮寄地址和非邮寄地址,有时只有1条记录,它既可以是邮寄地址也可以是非邮寄地址。

UniqueID,FirstName,LastName,DOB,House Number,City,State,Mailing

4444,George,Jetson,10/10/55,800,Orbit City,Space,0    
4444,George,Jetson,10/10/55,555,Orbit City,Space,1    
5555,Fred,Flintstone,12/12/04,88,Bedrock,PH,0    
5555,Fred,Flintstone,12/12/04,100,Bedrock,PH,1    
6666,Barney,Rubble,7/7/07,999,Bedrock,PH,0    
7777,Jonny,Quest,5/30/64,343,Action City,KS,1

我正在尝试进行一个查询,该查询将为每个人返回1行,并且希望该地址存在(如果有的话)。 因此理想情况下查询将返回这些记录

4444,George,Jetson,10/10/55,555,Orbit City,Space,1    
5555,Fred,Flintstone,12/12/04,100,Bedrock,PH,1    
6666,Barney,Rubble,7/7/07,999,Bedrock,PH,0    
7777,Jonny,Quest,5/30/64,343,Action City,KS,1

根据我一直在阅读的一些文章,有人在想也许需要子查询吗? 我在阅读的示例中被OVER PARTITION BY困住了,还是应该有某种IF语句? 我是SQL的新手,因此感谢您的指导或帮助。

使用SQL Server,您可以使用ROW_NUMBER ,例如,使用CTE:

WITH CTE AS
(
   SELECT UniqueID, FirstName, LastName, DOB, [House Number], City, State, Mailing,
          rn = ROW_NUMBER() OVER (PARTITION BY UniqueID  ORDER BY Mailing DESC)
   FROM dbo.TableName
)
SELECT UniqueID, FirstName, LastName, DOB, [House Number], City, State, Mailing,
FROM CTE
WHERE rn = 1

这是一个小提琴: http ://sqlfiddle.com/#!3/ 886b0/5/0

UNIQUEID    FIRSTNAME   LASTNAME    DOB HOUSE NUMBER    CITY    STATE               MAILING
4444        George  Jetson  October, 10 1955 00:00:00+0000  555 Orbit City  Space   1
5555        Fred    Flintstone  December, 12 2004 00:00:00+0000 100 Bedrock PH      1
6666        Barney  Rubble  July, 07 2007 00:00:00+0000 999 Bedrock PH              0
7777        Jonny   Quest   May, 30 1964 00:00:00+0000  343 Action City KS          1

您还可以将查询表达为:

select *
from tablename t
where mailing = 1
union all
select *
from tablename t
where not exists (select 1 from tablename t2 where t2.uniqueid = t.uniqueid);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM