Sql 来自重复列的唯一行组合

Sql 来自重复列的唯一行组合,sql,sql-server,Sql,Sql Server,我有一个有两列的表。列A在列b中重复,列b是其他几个表的主键。我需要找到A列在b列中的位置不止一次 我正在使用SQL2008 Table Col A Col B 0842311459 91 0884113434 91 9780842311458 91 9780884113430 91 9780842311458 95 9780884113430 95 0842359397 105 9780842359399 105 06871

我有一个有两列的表。列A在列b中重复,列b是其他几个表的主键。我需要找到A列在b列中的位置不止一次

我正在使用SQL2008

Table
Col A           Col B
0842311459      91
0884113434      91
9780842311458   91
9780884113430   91
9780842311458   95
9780884113430   95
0842359397      105
9780842359399   105
0687192706      135
9780687192700   135
我希望输出仅为重复数据:

Col A         Col B
9780842311458   91
9780884113430   91
9780842311458   95
9780884113430   95


您可以使用
EXISTS

select t.cola, t.colb
from tablename t
where exists (
  select 1 from tablename
  where cola = t.cola and colb <> t.colb
)
请参阅。
结果:

结果
您可以使用cte获得相同的输出

    create table #Table
    ( 
        ColA    varchar(100),   
        ColB    int
    )

    insert into #Table values ('0842311459'      ,91)
    insert into #Table values ('0884113434'      ,91)
    insert into #Table values ('9780842311458'   ,91)
    insert into #Table values ('9780884113430'   ,91)
    insert into #Table values ('9780842311458'   ,95)
    insert into #Table values ('9780884113430'   ,95)
    insert into #Table values ('0842359397'      ,10)
    insert into #Table values ('9780842359399'   ,10)
    insert into #Table values ('0687192706'      ,13)
    insert into #Table values ('9780687192700'   ,13)
第一个问题

    ; with cte_first as (
    select  * 
    from    #Table
    )
    select  a.ColA, a.ColB
    from    cte_first a
    join    #Table b
            on a.ColA = b.ColA 
            and a.ColB <> b.ColB
第一输出

    ColA            ColB
    --------------- ------
    9780842311458   95
    9780884113430   95
    9780842311458   91
    9780884113430   91
第二输出

    ColA            colb
    --------------- ------
    9780842311458   95 91
    9780884113430   95 91

谢谢你们所有人提供这些好的选择。我真的很感激。我将测试其中的一些,并进行测试。我真的很喜欢使用self-join的那个。
DECLARE
    @TestData TABLE
    (
        ColA VARCHAR(20),
        ColB INT
    );

INSERT INTO @TestData
VALUES
(
    '0842311459', 91
);
INSERT INTO @TestData
VALUES
(
    '0884113434', 91
);
INSERT INTO @TestData
VALUES
(
    '9780842311458', 91
);
INSERT INTO @TestData
VALUES
(
    '9780884113430 ', 91
);
INSERT INTO @TestData
VALUES
(
    '9780842311458', 95
);
INSERT INTO @TestData
VALUES
(
    '9780884113430', 95
);
INSERT INTO @TestData
VALUES
(
    '0842359397', 105
);
INSERT INTO @TestData
VALUES
(
    '9780842359399', 105
);
INSERT INTO @TestData
VALUES
(
    '0687192706', 135
);
INSERT INTO @TestData
VALUES
(
    '9780687192700', 135
);

SELECT
    *
FROM
    @TestData
WHERE
    ColA IN
    (
        SELECT
            ColA
        FROM
            @TestData
        GROUP BY
            ColA
        HAVING
            COUNT(*) > 1
    );
9780842311458   91
9780884113430   91
9780842311458   95
9780884113430   95
    create table #Table
    ( 
        ColA    varchar(100),   
        ColB    int
    )

    insert into #Table values ('0842311459'      ,91)
    insert into #Table values ('0884113434'      ,91)
    insert into #Table values ('9780842311458'   ,91)
    insert into #Table values ('9780884113430'   ,91)
    insert into #Table values ('9780842311458'   ,95)
    insert into #Table values ('9780884113430'   ,95)
    insert into #Table values ('0842359397'      ,10)
    insert into #Table values ('9780842359399'   ,10)
    insert into #Table values ('0687192706'      ,13)
    insert into #Table values ('9780687192700'   ,13)
    ; with cte_first as (
    select  * 
    from    #Table
    )
    select  a.ColA, a.ColB
    from    cte_first a
    join    #Table b
            on a.ColA = b.ColA 
            and a.ColB <> b.ColB
    ; with cte_first as (
    select  * 
    from    #Table
    )
    select  a.ColA, concat(a.colb, ' ', b.colb) colb
    from    cte_first a
    join    #Table b
            on a.ColA = b.ColA 
            and a.ColB > b.ColB
    ColA            ColB
    --------------- ------
    9780842311458   95
    9780884113430   95
    9780842311458   91
    9780884113430   91
    ColA            colb
    --------------- ------
    9780842311458   95 91
    9780884113430   95 91