根据列值选择不同的行
问题描述:
在一张表中,我有四列'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'的行。我试过的组合没有得到我认为他们会的结果。 感谢
答
我会首先选择具有填充所有四个领域的所有行:
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
用您正在使用的数据库标记您的问题。同时显示你想要的结果集。而且,如果你有“爱丽丝史密斯2000-01-01 0876543”和“爱丽丝史密斯2001-01-01 1234567”呢? –
你是如何在数据库表中找到这种数据的?我要求好奇,而不是批评。虽然您可能会收到一个解决方案,但可能有更好的方法来组织此数据集以避免出现类似情况。 – zedfoxus
你在使用哪个数据库?请用任何标记标记问题。并且请显示您的查询,即使它不工作或甚至编译。 – Bohemian