좋은 아침,
내가 필요한 것을 달성하기 위해 작성한 스크립트가 첨부되어 있습니다.
기본적으로 (1,2), (1,3), ..., (1, k), (2, 3), ..., (k) 순차(왼쪽에서 오른쪽으로) 셀에서 쌍을 만듭니다. -1, k)
그런 다음 그것들을 쌓고 레이블을 붙입니다.
누구든지 SQL에서 동일한 작업을 수행하는 방법을 알고 있습니까?
미리 감사드립니다!
진정으로,
MG
감사 @vince_faller ,
JSL 접근 방식은 이중 for 루프보다 확실히 더 매끄럽습니다.
nchooseekmatrix 기능을 보여 주셔서 대단히 감사합니다!
진정으로,
MG
테이블을 조인하면 t1.row < t2.row에서 자체적으로 조인할 수 있습니다.
이 스크립트는 저에게 효과가 있었지만 행 1개(사실인지 의심스럽긴 하지만 단일 행을 선택할 수 있음)를 가정하고, 전치할 ID 열과 row_Number도 추가해야 했습니다.행 번호는 열 이름으로 정렬되므로 작동하지 않으면 모르겠습니다.
DECLARE @colsUnpivot AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @colsUnpivot = stuff((select ','+quotename(C.name)
from sys.columns as C
where C.object_id = object_id('[Test].[dbo].[example]') and
C.name <> 'ID'
for xml path('')), 1, 1, '')
set @query
= 'with t1 AS (select ID, ROW_NUMBER() OVER(ORDER BY name ASC) AS Row#, name, value
from [Test].[dbo].[example]
unpivot
(
value for name in ('+@colsUnpivot+')
) unpiv),
t2 AS (select ID, ROW_NUMBER() OVER(ORDER BY name ASC) AS Row#, name, value
from [Test].[dbo].[example]
unpivot
(
value for name in ('+@colsUnpivot+')
) unpiv)
SELECT CAST(t1.value AS varchar(14)) + ''_'' + CAST(t2.value AS varchar(14)) AS [concatted]
FROM t1 INNER JOIN t2 ON t1.Row# < t2.Row#
ORDER BY t1.Row# ASC, t2.Row# ASC'
JMP가 아닌 SQL에서 수행하는 이유가 있습니까?JMP에서 이것이 훨씬 더 쉽다는 것을 알았기 때문입니다.
nck = nchoosekmatrix(ncols(dt), 2);
mat = dt << Get As Matrix;
nmat = shape(mat[nck], nrows(nck), 2);
dt_new = New Table("Concatted",
New Column("Value1", <<SET values=""></SET>