おはようございます、
添付されているのは、私が必要なことを達成するために書いたスクリプトです。
基本的に、(1,2)、(1,3)、...、(1、k)、(2、3)、...、(k)から始まる連続した(左から右への)セルからペアを作成します-1、k)
次に、それらをスタックし、ラベルを付けます。
SQLで同じことを達成する方法を知っている人はいますか?
前もって感謝します!
心から、
MG
ありがとう@vince_faller 、
JSLのアプローチは、doubleforループよりもはるかに洗練されています。
nchoosekmatrix関数を表示していただきありがとうございます。
心から、
MG
テーブルを転置すると、t1.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>