그룹 내의 모든 레코드 조합을 찾을 수있는 T-SQL 루틴 (SQL Server 2014)을 개발하려고합니다.TSQL : 크로스 조인없이 그룹 내의 행 조합 찾기
주어진 다음의 데이터 :
ID_COMBINATION | ID_POSITION | MULTIPLY_FACTOR
-----------------------------------------------
1 | 1 | 1
1 | 1 | 2
1 | 1 | 3
1 | 2 | 1
1 | 2 | 2
1 | 2 | 3
내가해야 주어진 ID_COMBINATION
결과에 대한 ID_POSITIONS의 전체 집합에 대한 MULTIPLY_FACTOR의 조합을 계산하고 싶습니다 :
1 | 1 | 1
1 | 2 | 1
1 | 1 | 1
1 | 2 | 2
1 | 1 | 1
1 | 2 | 3
...
1 | 1 | 3
1 | 2 | 3
을 잠시 닫힌 루틴 정의를 선호하는 순간 (uniq의 수에 따라 런타임에 다중 교차 조인 코드를 생성하기 위해 동적 SQL을 사용하는 것보다 그룹 내 ID_POSITIONS)
도움 주셔서 감사합니다.
편집 : 나는 각각의 MULTPLY_FACTOR 값을 갖는 새 ID_POSITION 키를 추가하면 내가 가진 것,
declare @Samples as Table (Id_Combination Int, Id_Position Int, Multiply_Factor Int);
INSERT INTO @Samples (Id_Combination, Id_Position, Multiply_Factor)
VALUES (1, 1, 1), (1, 1, 2), (1, 1, 3)
, (1, 2, 1), (1, 2, 2), (1, 2, 3)
SELECT
S1.Id_Combination
,S1.Id_Position AS s1_idpos
,S1.Multiply_Factor AS s1_mufac
,S2.Id_Position AS s2_idpos
,S2.Multiply_Factor AS s2_mufac
FROM @Samples AS S1
INNER JOIN @Samples AS S2
ON s1.Id_Combination = s2.Id_Combination
AND s1.Id_Position < s2.Id_Position
그러나 :
다음 TSQL 코드가 주어진 ID_COMBINATION 한 고유 ID_POSITION의 조합을 계산 조인 조건을 수정하고 다음과 같이 새로운 시나리오를 처리하는 명령문을 선택하십시오.
declare @Samples as Table (Id_Combination Int, Id_Position Int, Multiply_Factor Int);
INSERT INTO @Samples (Id_Combination, Id_Position, Multiply_Factor)
VALUES (1, 1, 1), (1, 1, 2), (1, 1, 3)
,(1, 2, 1), (1, 2, 2), (1, 2, 3),
,(1, 3, 1), (1, 3, 2), (1, 3, 3);
SELECT
S1.Id_Combination
,S1.Id_Position AS s1_idpos
,S1.Multiply_Factor AS s1_mufac
,S2.Id_Position AS s2_idpos
,S2.Multiply_Factor AS s2_mufac
,S3.Id_Position AS s3_idpos
,S3.Multiply_Factor AS s3_mufac
FROM @Samples AS S1
INNER JOIN @Samples AS S2
ON s1.Id_Combination = s2.Id_Combination
AND s1.Id_Position < s2.Id_Position
INNER JOIN @Samples AS S3
ON s2.Id_Combination = s3.Id_Combination
AND s2.Id_Position < s3.Id_Position
내 질문 일반 아이디어로 돌아가서 : 여기에 "가능한", ID_POSITION 도메인에서 모든 가능한 미래의 가치를 커버하고 SELECT 절에 새로운 필드를 추가하는 대신 수직으로 가치를 제시하는 "일반"TSQL 코드를 작성하는 방법. 부모의 ID_COMBINATION 안에서 서로 다른 조합을 구별하기 위해 일부 SUB_COMBINATION 키가 추가되어야합니다. ...
왜 크로스 조인을 사용 하시겠습니까? –
@TimBiegeleisen 디자인 타임에 설정된 ID_POSITION의 크기를 추정 할 수 없기 때문에. 그렇다면 동적 SQL을 사용하지 않고도이 솔루션을 코딩 할 수 없습니다. CROSS JOIN을 사용하기보다는 동적 SQL에 대한 대안을 찾고자합니다. –
새 샘플 코드를 수정하고 실행하면 제공 한 샘플 결과 (예 : 3 개 대신 7 개의 열)와는 다른 결과가 나타납니다. 나는 혼란스러워. – HABO