サンプルデータ
DECLARE @Dependencies TABLE
([ID] int, [parent] varchar(50), [dependent] varchar(50), [relationship] varchar(50));
INSERT INTO @Dependencies
([ID], [parent], [dependent], [relationship])
VALUES
(1234, 'John', 'Mike', 'Parent'),
(1235, 'Mike', 'John', 'Child'),
(1236, 'Nancy', 'John', 'Spouse'),
(1237, 'John', 'Nancy', 'Spouse'),
(1238, 'Peter', 'Mike', 'Sibling'),
(1239, 'Mike', 'Peter', 'Sibling');
クエリ
計算MIN
と(parent, dependent)
のMAX
、あなたがすることができます一緒にグループにそれらを。
SELECT
ID
,CASE WHEN [parent] < [dependent] THEN [parent] ELSE [dependent] END AS MinRelationship
,CASE WHEN [parent] > [dependent] THEN [parent] ELSE [dependent] END AS MaxRelationship
,[relationship]
FROM @Dependencies
;
結果
+------+-----------------+-----------------+--------------+
| ID | MinRelationship | MaxRelationship | relationship |
+------+-----------------+-----------------+--------------+
| 1234 | John | Mike | Parent |
| 1235 | John | Mike | Child |
| 1236 | John | Nancy | Spouse |
| 1237 | John | Nancy | Spouse |
| 1238 | Mike | Peter | Sibling |
| 1239 | Mike | Peter | Sibling |
+------+-----------------+-----------------+--------------+
残りの部分は、あなたが選択する各ペアからのどの行に依存します。たとえば、最小ID
の行を選択することができます。 CTE_MinMax
は上記の単純なクエリです。 CTE_rn
は、ペアで区切られた各行に数字を追加し、ID
で並べ替えます。最後のSELECT
は、各ペアに対して1つの行のみを返します。
エントリが1つしかない(ペアではない)場合、または2つ以上のエントリがある場合、クエリは正しく動作します。このような結果セットをスキップ
WITH
CTE_MinMax
AS
(
SELECT
ID
,CASE WHEN [parent] < [dependent] THEN [parent] ELSE [dependent] END AS MinRelationship
,CASE WHEN [parent] > [dependent] THEN [parent] ELSE [dependent] END AS MaxRelationship
,[relationship]
FROM @Dependencies
)
,CTE_rn
AS
(
SELECT
ID
,MinRelationship
,MaxRelationship
,relationship
,ROW_NUMBER() OVER (PARTITION BY MinRelationship, MaxRelationship ORDER BY ID) AS rn
FROM CTE_MinMax
)
SELECT
ID
,MinRelationship
,MaxRelationship
,relationship
FROM CTE_rn
WHERE rn = 1
;
結果
+------+-----------------+-----------------+--------------+
| ID | MinRelationship | MaxRelationship | relationship |
+------+-----------------+-----------------+--------------+
| 1234 | John | Mike | Parent |
| 1236 | John | Nancy | Spouse |
| 1238 | Mike | Peter | Sibling |
+------+-----------------+-----------------+--------------+
はそう簡単ではありません、あなたは、最初に(区切り文字としてカンマでの標準的なスプリット機能はどうしたら)、テーブルを分割する必要があります分割を使用して一致を検索し、一致の最初のものまたは一致しなかったものだけを選択します(これが可能であれば)。 – ZLK