在一个表中我有四列'FirstName','LastName','Dob','Number' 唯一的'first Name'和'LastName'有多行,它们可以有相同或不同的'Number'和'Dob'值
FirstName LastName Dob Number
Alice Smith 02/03/77 0876543 (require)
Alice Smith Null 0876543 (Not require)
Alice Smith Null Null (Not require)
John Adam 11/28/63 3265783 (require)
John Adam 11/28/63 Null (Not Require)
John Adam 05/15/58 Null (require)
Sally Smith Null Null (require)
我想要不同的行,但是如果'Number'或'Dob'与同一FirstName'和'LastName'的其他记录匹配,我只需要一条记录 我正在寻找上面示例中标记为“require”的行。我试过的组合没有得到我认为会有的结果。 感谢
答案 0 :(得分:0)
我首先选择填充了所有四个字段的所有行:
SELECT DISTINCT FirstName, LastName, Dob, Number
FROM customers
WHERE Dob IS NOT NULL And Number IS NOT NULL
然后我会在选择中添加第一个选择中不存在的NOT NULL值的记录:
with RequiredSet as (
SELECT DISTINCT FirstName, LastName, Dob, Number
FROM customers
WHERE Dob IS NOT NULL And Number IS NOT NULL
), AdditionalSet as (
SELECT distinct c.FirstName, c.LastName, c.Dob, c.Number
FROM customers c
WHERE Dob IS NOT NULL And NOT EXISTS(SELECT 1
FROM RequiredSet r
WHERE r.FirstName = c.FirstName And r.LastName=c.LastName And r.Dob=c.Dob)
OR Number IS NOT NULL And NOT EXISTS(SELECT 1
FROM RequiredSet r
WHERE r.FirstName = c.FirstName And r.LastName=c.LastName And r.Number=c.Number)
)
SELECT FirstName, LastName, Dob, Number
FROM RequiredSet
UNION ALL
SELECT FirstName, LastName, Dob, Number
FROM AdditionalSet