2016-09-21 1 views
0

이 제목은 처음에는 약간 혼란스러워 보일 수 있지만 내 의도가 명확 해지기를 바랍니다.SQL Server - "일치하는"변수 ID에 동일한 ID 부여

ID1  ID2 uniqueidentifier 

A14  A21 
A14  A55 
A21  A14 
A21  A55 
A55  A14 
A55  A21 
... 
A123  A22 
A22  A123 
... 

ID 뒤에는 몇 가지 기준에 따라 일치하는 회사 이름이 있습니다. 기본적으로 표시된 예제는 ID 'A14'가 'A21'과 일치한다는 것을 의미하지만 그 반대의 경우도 마찬가지입니다. 그리고 기준에 맞는 세 번째 회사 이름이 있습니다. 다음과 같이 이름이 때로는 서로 다르게 기록 된대로

나는, 기업 별 그룹을 할수 없어 :
- 예 회사 (주)
- 예 회사 (주)

기본적으로 처음 6 행 것 동일한 식별자를 가짐. 그리고 다른 두 사람도 마찬가지입니다. 이 테이블을 NEWID()로 업데이트하려는 경우 uniqueidentifier가 새로운 시점이됩니다.

질문 : 내가 uniqueidentifiers 할당 할 수있는 방법 (NEWID()를)는 출력

내 문제에 대한 어떤 제안처럼 보이도록?

저는 오랫동안 생각해 본 문제이기 때문에 어떤 종류의 도움에도 매우 행복 할 것입니다.

편집 : 예상 출력은 다음과 같습니다

ID1  ID2 uniqueidentifier 

A14  A21 XXER-WQEE-... 
A14  A55 XXER-WQEE-... 
A21  A14 XXER-WQEE-... 
A21  A55 XXER-WQEE-... 
A55  A14 XXER-WQEE-... 
A55  A21 XXER-WQEE-... 
... 
A123  A22 IOKK-Q23A-... 
A22  A123 IOKK-Q23A-... 
... 

감사 MG 나는이 일이 당신이 원하는 결과를 제공한다고 생각

+1

예상 출력을 표시 할 수 있습니까 – TheGameiswar

+2

그 uniqueidentifier는 어디에서 왔습니까? –

+0

이 순간에 'NEWID()'테이블을 업데이트 할 것입니다. – mgruber

답변

1

. 죄송합니다, 좀 지저분합니다. 설명이 필요한 경우 질문하십시오.

DECLARE @Table1 TABLE (ID1 varchar(100), ID2 varchar(100), uniqueid uniqueidentifier) 

INSERT @Table1 
    (ID1, ID2, uniqueid) 
VALUES 
    ('1', '2', NULL ), 
    ('2', '1', NULL ), 
    ('2', '3', NULL ), 
    ('3', '2', NULL ), 
    ('1', '3', NULL ), 
    ('3', '1', NULL ), 
    ('4', '5', NULL ), 
    ('5', '4', NULL ) 

DECLARE @tmp VARCHAR(100) 
DECLARE @NewID UNIQUEIDENTIFIER 

DECLARE @ID2 TABLE (ID2 varchar(100)) 

WHILE EXISTS (SELECT 1 FROM @Table1 WHERE uniqueid IS NULL) 
BEGIN 

SET @NewID = NEWID() 

SELECT @tmp = ID1 
FROM @Table1 
WHERE uniqueid IS NULL 

DELETE @ID2 

UPDATE @Table1 
SET uniqueid = @NewID 
OUTPUT Inserted.ID2 
INTO @ID2 
WHERE ID1 = @tmp 

WHILE EXISTS (SELECT 1 FROM @ID2 JOIN @Table1 ON [@Table1].ID1 = [@ID2].ID2 WHERE [@Table1].uniqueid IS NULL) 
BEGIN 

    UPDATE t1 
    SET uniqueid = @NewID 
    OUTPUT Inserted.ID2 
    INTO @ID2 
    FROM @Table1 t1 
    JOIN @ID2 id2 ON t1.ID1 = id2.ID2 

END 


END 

SELECT * FROM @Table1 
+0

이것은 제가 찾고 있던 것입니다! 엄지 손가락을 UP !! – mgruber

+0

안녕하세요 발레라! 내 첫 번째 질문의 변경된 요구 사항에 대해이 질문에 대한 또 다른 대답을 추가했습니다. 당신이 저를 도울 수 있기를 바랍니다. 미리 감사드립니다! – mgruber

-1

상황이 바뀌었고 적응 코드가 필요합니다.
일부 ID에는 이미 고유 식별자가 있습니다.

위에 게시 된 코드 (@Valera Soroka 제공)는 uniqueidentifier가 NULL 인 ID 만 고려합니다. 즉, 행 1-2에 이미 고유 식별자가있는 경우 예제에서 3-6 행에 대해 새 고유 식별자를 부여합니다. 코드는 uniqueidentifier가있는 ID를 먼저 찾아야합니다.

또한 나라를 추가하기를 원합니다. 그래서 루프는 동일한 국가의 ID를 통해서만 진행되기 때문에 더 많은 공연이 이루어집니다. 그래서 국가는 코드에서 구현되어야합니다.


그래서 실제 상황은 다음과 같습니다

ID1  ID2 Country(ID1) uniqueidentifier 

A14  A21  USA  XXER-WQEE-... 
A14  A55  USA  XXER-WQEE-... 
A21  A14  USA 
A21  A55  USA 
A55  A14  USA 
A55  A21  USA 
... 
A123  A22 Canada 
A22  A123 Canada 
... 

예상 출력은, 다음과 같이됩니다

ID1  ID2 Country(ID1) uniqueidentifier 

A14  A21  USA  XXER-WQEE-... 
A14  A55  USA  XXER-WQEE-... 
A21  A14  USA  XXER-WQEE-... 
A21  A55  USA  XXER-WQEE-... 
A55  A14  USA  XXER-WQEE-... 
A55  A21  USA  XXER-WQEE-... 
... 
A123  A22 Canada  IOKK-Q23A-... 
A22  A123 Canada  IOKK-Q23A-... 
... 


(I 단지의 ID를 할 수 위와 동일한 ID를했다 어떤 ID이든)

도움을 많이 주셔서 감사합니다! MG

관련 문제