首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将结果与查询分开?

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

Stack Overflow用户
提问于 2011-06-22 16:22:50
回答 1查看 85关注 0票数 0

我有一个表,我想在其中捕获重复的值。

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

下表:

代码语言:javascript
复制
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]

以下是几个值:

代码语言:javascript
复制
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')

用于捕获重复值的查询:

代码语言:javascript
复制
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

结果:

代码语言:javascript
复制
telephone  Count
---------  -----
123        3
1234       3
1243       2
15234      2

但是我想得到这样的结果:

代码语言:javascript
复制
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

我该怎么做呢?

EN

回答 1

Stack Overflow用户

发布于 2011-06-22 16:57:20

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6436931

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档