我有一张包含列的表格:
Acct_no, PSTL_CODE, NAME, phone
我试图摆脱共享相同PSTL_CODE 和电话的所有行(即转储那些与他/她相同的电话)。她的帐户,以及类似的情况)
我已经将以下内容拉到了一起,我认为应该只返回具有唯一PSTL_CODE的行:
SELECT * FROM Sheet1
WHERE PSTL_CODE IN
(SELECT PSTL_CODE FROM SHEET1
GROUP BY PSTL_CODE HAVING COUNT(PSTL_CODE) =1)
ORDER BY phone
并且 close-ish ,但它仍然返回一行,其中有两个帐户位于同一个PSTL_CODE。
而且我一直坚持使用Access 2007,所以我无法做到:
SELECT * FROM Sheet1
EXCEPT
(SELECT PSTL_CODE FROM SHEET1
GROUP BY PSTL CODE HAVING COUNT(*) >1)
ORDER BY phone
为了躲开倍数。
帮助!
答案 0 :(得分:0)
尝试使用Exists
考虑到您的独特组合为PSTL_CODE
和phone
SELECT *
FROM sheet1 a
WHERE EXISTS (SELECT 1
FROM sheet1 b
WHERE a.pstl_code = b.pstl_code
AND a.phone = b.phone
HAVING Count(*) = 1)
ORDER BY phone
最好在Unique Constraint
和PSTL_CODE
列上定义phone
,以帮助您避免表格中的重复记录
答案 1 :(得分:0)
如果我正确理解了业务逻辑,那么您正试图从查询中消除共同生活的夫妻。您正在通过电话进行分组,这似乎导致了错误。两个人住在同一个地方但有不同的电话号码是否有合理的商业原因。比如手机?
答案 2 :(得分:0)
一种方法是生成一组唯一的电话,邮政编码是重复的,然后将您的基本集合LEFT加入到postal_Code为空的生成集合中。
Select *
FROM SHEET1 A
LEFT JOIN (
Select count(*) as cnt pstl_Code, phone
From sheet1
group by pstl_Code, phone
having count(*) > 1) B
on A.Pstl_Code = B.Pstl_Code
and A.Phone = B.Phone
where B.pstl_Code is null and b.phone is null