2017-03-08 162 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

相關問題