早安,
附件是我寫的腳本,可以完成我的需要。
基本上,它從順序(從左到右)單元格中創建對,從(1,2), (1,3), ..., (1, k), (2, 3), ... , (k -1, k)
然後將它們堆疊起來並貼上標籤。
有誰知道如何在 SQL 中完成相同的任務。
先致謝!
真摯地,
MG
謝謝@vince_faller ,
您的 JSL 方法肯定比雙 for 迴圈更靈活。
非常感謝您展示 nchoosekmatrix 函數!
真摯地,
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'
您在 SQL 中而不是在 JMP 中執行此操作是否有原因?因為我發現在 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>