Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何将结果与查询分开?_Sql - Fatal编程技术网

Sql 如何将结果与查询分开?

Sql 如何将结果与查询分开?,sql,Sql,我有一个表,我想捕捉重复的值 捕获它们之后,我想将这些结果分隔成单独的行 下表: CREATE TABLE [dbo].[ContactTable]( [contactid] [int] IDENTITY(1,1) NOT NULL, [telephone1] [varchar](100) NULL, [telephone2] [varchar](100) NULL, [fullname] [varchar](100) NOT NULL ) ON [PRIMARY] 几个值: insert i

我有一个表,我想捕捉重复的值

捕获它们之后,我想将这些结果分隔成单独的行

下表:

CREATE TABLE [dbo].[ContactTable](
[contactid] [int] IDENTITY(1,1) NOT NULL,
[telephone1] [varchar](100) NULL,
[telephone2] [varchar](100) NULL,
[fullname] [varchar](100) NOT NULL
) ON [PRIMARY]
几个值:

insert into ContactTable(telephone1, telephone2,fullname) values('123','1234','danny')
insert into ContactTable(telephone1, telephone2,fullname) values('123','1234','danny1')
insert into ContactTable(telephone1, telephone2,fullname) values('123*','1234#','martin')
insert into ContactTable(telephone1, telephone2,fullname) values('1243*','15234#','martin')
insert into ContactTable(telephone1, telephone2,fullname) values('1243','15234','martin1')
用于捕获重复值的查询:

SELECT     Phones, COUNT(Phones) AS CountPhones
FROM    
(
    SELECT     Phones, contactid
    FROM
    (
        SELECT     telephone1 AS Phones, contactid
        FROM          ContactTable
        WHERE      (telephone1 IS NOT NULL) 
        UNION ALL
        SELECT     REPLACE(telephone1, '*', '') AS Phones, contactid
        FROM         ContactTable 
        WHERE     (telephone1 IS NOT NULL)  AND (telephone1 LIKE '%*')
        UNION ALL
        SELECT     REPLACE(telephone1, '#', '') AS Phones, contactid
        FROM         ContactTable 
        WHERE     (telephone1 IS NOT NULL)  AND (telephone1 LIKE '%#')
        UNION ALL
        SELECT     telephone2 AS Phones, contactid
        FROM          ContactTable
        WHERE      (telephone2 IS NOT NULL) 
        UNION ALL
        SELECT     REPLACE(telephone2, '*', '') AS Phones, contactid
        FROM         ContactTable 
        WHERE     (telephone2 IS NOT NULL)  AND (telephone2 LIKE '%*')
        UNION ALL
        SELECT     REPLACE(telephone2, '#', '') AS Phones, contactid
        FROM         ContactTable 
        WHERE     (telephone2 IS NOT NULL)  AND (telephone2 LIKE '%#')
    )as Tel
    GROUP BY Phones, contactid
) as T
GROUP BY Phones
HAVING      (COUNT(*) > 1)
ORDER BY CountPhones DESC
结果是:

telephone  Count
---------  -----
123        3
1234       3
1243       2
15234      2
但我想得到这样的结果:

id  telephone  fullname
--  ---------  --------
1   123        danny
2   123        danny1
3   123        martin
3   1234       martin
1   1234       danny
2   1234       danny1
5   1243       martin1
4   1243       martin
4   15234      martin
5   15234      martin1

我该怎么做?

请说明什么定义了重复值?值-例如,如果电话号码为123、123或123*,那么我有3个重复项。这里我得到所有电话,但我只想得到与重复值相关的所有行。。
SELECT * FROM (
SELECT
    contactid AS id, 
    REPLACE(REPLACE(telephone1, '*', ''), '#', '') AS telephone, 
    fullname 
FROM
    ContactTable 
UNION ALL
SELECT 
    contactid AS id, 
    REPLACE(REPLACE(telephone2, '*', ''), '#', '') AS telephone, 
    fullname
    FROM ContactTable) AS all_phones 
WHERE all_phones.telephone in (
    SELECT phone FROM (
        SELECT 
            COUNT(*) AS pnumber, 
            phone 
        FROM (
            SELECT 
                REPLACE(REPLACE(telephone1, '*', ''), '#', '') AS phone
            FROM
                ContactTable 
            UNION ALL
            SELECT 
                REPLACE(REPLACE(telephone2, '*', ''), '#', '') AS phone
            FROM 
                ContactTable ) AS phones 
            GROUP BY phone) 
        AS phone_numbers WHERE pnumber > 1)