簡體   English   中英

根據列值選擇不同的行

[英]select distinct rows based on column values

在一個表中,我有四列'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'的行。 我試過的組合沒有得到我認為會有的結果。 謝謝

我首先選擇填充了所有四個字段的所有行:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM