レコードが結合されていればそれを削除し、他のレコードの結合については考慮しません。これを1つの声明で行うことは可能ですか?SQL Server:Join/Cross Applyのレコードを一度だけ使用します
したがって、次の例では、最初のレコードでB.recordID = 2がすでに使用されているため、2番目のレコードに対してMatchID = 1を設定します。私は、サンプルコードは、それが明確になると信じて:彼らは試合として使用している場合
http://sqlfiddle.com/#!6/555a1/5/0
だから要約で私はもう利用可能考慮されるべきではない、テーブルBのレコードが必要です。EDIT1:
CREATE TABLE A
(
id int,
eventName varchar(80),
startdateTime datetime,
duration int,
MatchedID int NULL
)
CREATE TABLE B
(
id int,
eventName varchar(80),
startdateTime datetime,
duration int
)
INSERT INTO A
SELECT 1, 'e1', dateadd(day, -1, getdate()), 5, NULL
UNION
SELECT 2, 'e1', dateadd(hour, -1, getdate()), 5, NULL
INSERT INTO B
SELECT 1, 'e1', dateadd(day, -1, getdate()), 4
UNION
SELECT 2, 'e1', dateadd(hour, -1, getdate()), 5
クエリ:
UPDATE toUpdate
SET toUpdate.MatchedID = Tbtmp.id
FROM A toUpdate
CROSS APPLY (SELECT TOP(1) *
FROM B WHERE toUpdate.eventName = B.eventName
ORDER BY ABS(toUpdate.Duration - B.Duration)) Tbtmp;
SELECT * FROM A
結果:秒
| id | eventName | startdateTime | duration | MatchedID |
+----+-----------+--------------------------+----------+-----------+
| 1 | e1 | 2017-10-11T11:34:15.083Z | 5 | 2 |
| 2 | e1 | 2017-10-12T10:34:15.083Z | 5 | 2 |
期待される結果(MatchedID
スキーマを構築:サンプルコードを追加しますrec元のレコードに近いものの、すでに2が使用されているためordは1になるはずです)
| id | eventName | startdateTime | duration | MatchedID |
+----+-----------+--------------------------+----------+-----------+
| 1 | e1 | 2017-10-11T11:34:15.083Z | 5 | 2 |
| 2 | e1 | 2017-10-12T10:34:15.083Z | 5 | 1 |
あなたの質問に、コードとサンプルデータを置く必要があります。問題は、理解されるべき外部サイトに頼るべきではない。 –
期待どおりの結果?同様の詳細な説明も同様です。 –
@AnkitBajpaiの予想結果が追加されました。 Thx – Asha