2017-03-08 164 views
1

在一张表中,我有四列'FirstName','LastName','Dob','Number' 独特的'first name'和'LastName'有多行,可以有相同或不同的“数”和“多波”值根据列值选择不同的行

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'or的‘多波’具有相同名字的其他记录相匹配”和'LastName' 我正在寻找上面示例中标记为'require'的行。我试过的组合没有得到我认为他们会的结果。 感谢

+0

用您正在使用的数据库标记您的问题。同时显示你想要的结果集。而且,如果你有“爱丽丝史密斯2000-01-01 0876543”和“爱丽丝史密斯2001-01-01 1234567”呢? –

+1

你是如何在数据库表中找到这种数据的?我要求好奇,而不是批评。虽然您可能会收到一个解决方案,但可能有更好的方法来组织此数据集以避免出现类似情况。 – zedfoxus

+0

你在使用哪个数据库?请用任何标记标记问题。并且请显示您的查询,即使它不工作或甚至编译。 – Bohemian

回答

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

谢谢@cha我会试试 – mssstack1

+0

仍然重复行。查询需要的时间太长,是否有可能得到不同的行的计数也谢谢 – mssstack1

+0

如果您将第一个查询RequiredSet添加到临时表,然后将第二个查询添加到另一个临时表,您可以显着提高它的速度。将添加一个Distinct到应该修复重复的第二个查询 – cha

相关问题