我在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”?以及数据库中存在多少其他匹配计数? 我试图在数据集中找到与这两列相关的模式。先谢谢你。
答案 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