2017-03-08 14 views
1

1つの表に4つの列 'FirstName'、 'LastName'、 'Dob'、 'Number'があります 一意の「名字」と「名字」の行が複数あり、同じまたは異なる「数」と「ドブ」を持つことができることは列の値に基づいて異なる行を選択する

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 『ドブ』は同じ姓の他のレコードと一致した」場合、私は1つのレコードのみを必要としますと 'LastName' 私は、上記の例では 'require'とラベル付けされた行を探しています。私が試した組み合わせは、私が思った結果を得られなかった。 おかげ

+0

使用しているデータベースで質問にタグを付けてください。また、希望の結果セットを表示します。そして、もしあなたが 'Alice Smith 2000-01-01 0876543'と' Alice Smith 2001-01-01 1234567'を持っていたら? –

+1

どのようにしてこの種のデータをデータベーステーブルに入れましたか?私は批判ではなく、好奇心を求めています。解決策を受け取ることがありますが、このような状況を避けるために、このデータセットを整理するより良い方法があります。 – zedfoxus

+0

あなたはどのデータベースを使用していますか?それが何であれ質問にタグを付けてください。そして、たとえそれが動作していなくても、コンパイルしていても、あなたの質問を表示してください。 – Bohemian

答えて

0

は、私が最初に読み込ますべての4つのフィールドを持っているすべての行を選択します:

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

ありがとう、私はそれを試してみます。 – mssstack1

+0

まだ重複する行を取得しています。ありがとう – mssstack1

+0

最初のクエリのRequiredSetを一時テーブルに追加して、2番目のクエリを別の一時テーブルに追加すると、速度が大幅に向上します。重複を修正する必要がある2番目のクエリにDistinctを追加します – cha

関連する問題