首先,正确规范化数据:
SELECT Name, Num0 AS Num FROM MyTable WHERE Num0 IS NOT NULL
UNION ALL
SELECT Name, Num1 FROM MyTable WHERE Num1 IS NOT NULL
UNION ALL
SELECT Name, Num2 FROM MyTable WHERE Num2 IS NOT NULL
UNION ALL
SELECT Name, Num3 FROM MyTable WHERE Num3 IS NOT NULL
UNION ALL
SELECT Name, Num4 FROM MyTable WHERE Num4 IS NOT NULL
UNION ALL
SELECT Name, Num5 FROM MyTable WHERE Num5 IS NOT NULL
UNION ALL
SELECT Name, Num6 FROM MyTable WHERE Num6 IS NOT NULL
UNION ALL
SELECT Name, Num7 FROM MyTable WHERE Num7 IS NOT NULL;
姓名号码
------ ----
约翰 1234
约翰 1234
约翰 1234
赫巴 234
吉姆 9876
吉姆 9876
吉姆 9876
金111
金111
金111
凯特666
然后只计算重复项:
SELECT Name, Num, COUNT(*)
FROM (SELECT Name, Num0 AS Num FROM MyTable WHERE Num0 IS NOT NULL
UNION ALL
SELECT Name, Num1 FROM MyTable WHERE Num1 IS NOT NULL
UNION ALL
SELECT Name, Num2 FROM MyTable WHERE Num2 IS NOT NULL
UNION ALL
SELECT Name, Num3 FROM MyTable WHERE Num3 IS NOT NULL
UNION ALL
SELECT Name, Num4 FROM MyTable WHERE Num4 IS NOT NULL
UNION ALL
SELECT Name, Num5 FROM MyTable WHERE Num5 IS NOT NULL
UNION ALL
SELECT Name, Num6 FROM MyTable WHERE Num6 IS NOT NULL
UNION ALL
SELECT Name, Num7 FROM MyTable WHERE Num7 IS NOT NULL)
GROUP BY Name, Num
HAVING COUNT(*) > 1;