使用sqlite查找行中的重复数

使用sqlite查找行中的重复数,sqlite,Sqlite,我有一个数据库表,其中有8个与每个条目名称相关联的条目。因此,我需要编写一个查询来获取联系人姓名的总数,其中每个联系人姓名都有重复的号码。 我有一个sqlite表,如下图所示 名称| Num0 | Num1 | Num2 | Num3 | Num4 | Num5 | Num6 | Num7 假设我有6000个条目,并且有100个条目具有重复的编号,这些编号可以位于从TelNum0到TelNum8的任何列中 例如:如下图所示,我有一个数据库,共有5个条目,有5个名称,如: Name N

我有一个数据库表,其中有8个与每个条目名称相关联的条目。因此,我需要编写一个查询来获取联系人姓名的总数,其中每个联系人姓名都有重复的号码。 我有一个sqlite表,如下图所示

名称| Num0 | Num1 | Num2 | Num3 | Num4 | Num5 | Num6 | Num7

假设我有6000个条目,并且有100个条目具有重复的编号,这些编号可以位于从TelNum0到TelNum8的任何列中

例如:如下图所示,我有一个数据库,共有5个条目,有5个名称,如:

Name Num0 Num1 Num2 Num3 Num4 Num5 Num6 Num7 1)John 1234 1234 1234 2)Hebbar 234 3)Jim 9876 9876 9876 4)Kim 111 111 111 5)Kate 666 名称Num0 Num1 Num2 Num3 Num4 Num5 Num6 Num7 1) 约翰1234 1234 1234 2) 赫巴234 3) 吉姆987698769876 4) 金111 111 5) 凯特666 现在,当我运行一个查询时,我应该得到3个结果,因为John、Jim和Kim有重复的条目与它们关联


非常感谢您首先,正确地规范化数据:

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;
Name Num ------ ---- John 1234 John 1234 John 1234 Hebbar 234 Jim 9876 Jim 9876 Jim 9876 Kim 111 Kim 111 Kim 111 Kate 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;