搜索两列之间的非唯一值

时间:2014-07-07 20:33:05

标签: sql duplicates unique

我有一个包含三列的单个表格,' id',' number'和'交易。'每个id应仅绑定到一个数字,但在不同的事务值下可能会在表中多次出现。我已经无法开发一个查询,该查询将返回单个ID共享多个数字的情况(并在报告中显示ID和数字)。我不希望通过查询删除这些值,我只需要查看值。见下面的例子:

这里有一个屏幕截图示例:http://i591.photobucket.com/albums/ss355/riggins_83/table2_zps5509f3cf.jpg我很感谢您的帮助,我已经尝试了这里发布的所有代码,但它还没有给我输出我正在寻找的输出。如屏幕截图所示,相同的ID号和号码可能会在表格中多次出现不同的交易号码,不应该出现的是第1行和第2行的内容(具有相同ID号的两个不同号码)。 ID号是一个值,该值应始终与事务仅链接到该行的相同Number相关联。我试图生成每个号码的输出,这些号码共享一个ID号码(如果可能的话,还有共享ID号码)。

Test    IDNumber    Number  Transaction
1        31         1551    5
2        31         1553    7
3        32         1701    8
4        33         1701    9
5        33         1701   10
6        33         1701   11
7        39         1885   12

我需要的输出结果:

IDNumber    Number
31            1551
31            1553

在两个(或可能更多)数字之间共享ID号的情况下,此输出显示数字(和ID号)。我知道表中有些情况下,许多号码之间共享一个ID号。

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:2)

SELECT *
FROM thetable t0
WHERE EXISTS (
    SELECT *
    FROM thetable t1
    WHERE t1.id = t0.id
           -- Not clear from the question if the OP wants the records
           -- to differ by number
    -- AND t1.number <> t1.number
       -- ... or by "transaction"
    AND t1."transaction" <> t0."transaction"
       -- ... or by either ???
    -- AND (t1.number <> t1.number OR t1."transaction" <> t0."transaction")
    );

答案 1 :(得分:1)

SELECT IDNumber, Number
FROM YourTable
WHERE IDNumber IN (
    SELECT IDNumber
    FROM YourTable
    GROUP BY IDNumber
    HAVING COUNT(DISTINCT number) > 1
)

子查询返回所有IDNumber超过1的IDNumber。然后主查询返回每个IDNumber的所有数字。

DEMO