[英]Identifying equivalent sets in SQL Server
以下是我在表中的記錄示例。 EntriesPerSet
列包含表中該SET_ID
的記錄數。 我需要在屬於不同SET_ID
的行之間建立等效性。 集合將是等效的,當且僅當它們每個集合包含相同數量的條目,並且每個條目在另一個集合中都有一個對應的條目(通過檢查K1
和K2
值)。 在以下情況下, SET_IDs
1 和 2 是等效的。
SET_ID K1 K2 EntriesPerSet
1 a b 4
1 c d 4
1 e f 4
1 g h 4
2 a b 4
2 c d 4
2 e f 4
2 g h 4
3 a b 5
3 c d 5
3 e f 5
3 g h 5
3 i j 5
4 a b 3
4 c d 3
4 e f 3
5 a b 4
5 c d 4
5 e f 4
5 p q 4
請幫助我如何做到這一點。 謝謝!
如果你只是想知道哪些對是等價的,你可以使用一個公共表表達式來獲得所有可能的組合,並使用一個INTERSECT
來找出它們中哪些完全重疊;
WITH cte AS (
SELECT DISTINCT a.SET_ID aid, b.SET_ID bid, a.EntriesPerSet
FROM mysets a
JOIN mysets b ON a.EntriesPerSet = b.EntriesPerSet AND a.SET_ID < b.SET_ID
)
SELECT aid, bid FROM cte
WHERE EntriesPerSet = (
SELECT COUNT(*) FROM (
SELECT K1,K2 FROM mysets WHERE SET_ID=aid
INTERSECT
SELECT K1,K2 FROM mysets WHERE SET_ID=bid
) a
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.