非重复记录的SQL查询

nth*_*nth 8 sql duplicates

我正在尝试构建一个将返回表中所有非重复(唯一)记录的查询.查询将需要使用多个字段来确定记录是否重复.

例如,如果表具有以下字段; PKID,ClientID,Name,AcctNo,OrderDate,Charge,我想使用AcctNo,OrderDate和Charge字段来查找唯一记录.

PKID-----ClientID-----Name-----AcctNo-----OrderDate-----Charge
1        JX100        John     12345      9/9/2010      $100.00
2        JX220        Mark     55567      9/9/2010       $23.00
3        JX690        Matt     89899      9/9/2010      $218.00
4        JX100        John     12345      9/9/2010      $100.00
Run Code Online (Sandbox Code Playgroud)

查询的结果需要是:

PKID-----ClientID-----Name-----AcctNo-----OrderDate-----Charge
2        JX220        Mark     55567      9/9/2010       $23.00
3        JX690        Matt     89899      9/9/2010      $218.00
Run Code Online (Sandbox Code Playgroud)

我尝试过使用SELECT DISTINCT,但这不起作用,因为它在结果中保留了一个重复的记录.我也尝试使用HAVING COUNT = 1,但返回所有记录.

谢谢您的帮助.

hei*_*erg 9

HAVING COUNT(*) = 1如果您只包含GROUP BY您用于查找唯一记录的字段,则可以使用.(即不是PKID,但你可以使用MAXMIN返回,因为你在结果集中每组只有一条记录.)


Mar*_*ith 5

SELECT   MAX(PKID)     AS PKID    ,
         MAX(ClientID) AS ClientID,
         MAX(Name)     AS Name    ,
         AcctNo                   ,
         OrderDate                ,
         Charge
FROM     T
GROUP BY AcctNo   ,
         OrderDate,
         Charge
HAVING   COUNT(*) = 1
Run Code Online (Sandbox Code Playgroud)

或者

SELECT PKID      ,
       ClientID  ,
       Name      ,
       AcctNo    ,
       OrderDate ,
       Charge
FROM   YourTable t1
WHERE  NOT EXISTS
       (SELECT *
       FROM    YourTable t2
       WHERE   t1.PKID     <> t2.PKID
       AND     t1.AcctNo    = t2.AcctNo
       AND     t1.OrderDate = t2.OrderDate
       AND     t1.Charge    = t2.Charge
       )
Run Code Online (Sandbox Code Playgroud)