簡體   English   中英

識別 SQL Server 中的等效集

[英]Identifying equivalent sets in SQL Server

以下是我在表中的記錄示例。 EntriesPerSet列包含表中該SET_ID的記錄數。 我需要在屬於不同SET_ID的行之間建立等效性。 集合將是等效的,當且僅當它們每個集合包含相同數量的條目,並且每個條目在另一個集合中都有一個對應的條目(通過檢查K1K2值)。 在以下情況下, 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
)

一個用於測試的 SQLfiddle

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM