[英]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.