我正在尝试构建一个将返回表中所有非重复(唯一)记录的查询.查询将需要使用多个字段来确定记录是否重复.
例如,如果表具有以下字段; 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,但返回所有记录.
谢谢您的帮助.
HAVING COUNT(*) = 1如果您只包含GROUP BY您用于查找唯一记录的字段,则可以使用.(即不是PKID,但你可以使用MAX或MIN返回,因为你在结果集中每组只有一条记录.)
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)