TSQL:在表格中查找PAIR序列

时间:2017-02-22 22:21:22

标签: sql-server tsql

我在T-SQL中有以下表格(还有其他列,但没有标识列或主键列):

    Oid Cid
    1    a
    1    b
    2    f
    3    c
    4    f
    5    a
    5    b
    6    f
    6    g
    7    f

因此,在上面的示例中,我想强调一下,当将Cid列值视为“PAIRS”时,Oid会重复:

Oid:
1 (1 matches Oid: 5)
2 (2 matches Oid: 4 and 7)

请注意,Oid 2比赛不包括Oid 6,因为6对也有字母'G'。

是否可以在不使用While循环的情况下创建查询以突出显示上面的“Oid”?以及数据库中存在多少其他匹配计数? 我试图在数据集中找到与这两列相关的模式。先谢谢你。

2 个答案:

答案 0 :(得分:0)

select o1.Cid, o1.Oid, o2.Oid 
     , count(*) + 1 over (partition by o1.Cid) as [cnt]
from table o1 
join table o2
  on o1.Cid = o2.Cid 
 and o1.Oid < o2.Oid 
order by o1.Cid, o1.Oid, o2.Oid 

答案 1 :(得分:0)

也许就像这样:

WITH CTE AS
(
    SELECT Cid, oid
    ,ROW_NUMBER() OVER (PARTITION BY cid ORDER BY cid) AS RN
    ,SUM(1) OVER (PARTITION BY oid) AS maxRow2
    ,SUM(1) OVER (PARTITION BY cid) AS maxRow
    FROM oid
)
SELECT * FROM CTE WHERE maxRow != 1 AND maxRow2 = 1
ORDER BY oid