Bonjour,
Ci-joint un script que j'ai écrit qui accomplit ce dont j'ai besoin.
Fondamentalement, il crée des paires de cellules séquentielles (de gauche à droite), allant de (1,2), (1,3), ..., (1, k), (2, 3), ..., (k -1, k)
Ensuite, il les empile et les étiquette.
Est-ce que quelqu'un sait comment accomplir la même chose en SQL.
Merci d'avance!
Sincèrement,
MG
Merci @vince_faller ,
Votre approche JSL est définitivement plus fluide que la double boucle for.
J'apprécie beaucoup d'avoir montré la fonction nchoosekmatrix !
Sincèrement,
MG
Si vous transposez les tables, vous pouvez joindre à lui-même sur t1.row < t2.row.
Ce script a fonctionné pour moi mais suppose 1 ligne (ce dont je doute que ce soit vrai, mais vous pouvez sélectionner une seule ligne), j'ai également dû ajouter une colonne ID à transposer et un row_Number.Le numéro de ligne est trié par le nom de la colonne, donc si cela ne fonctionne pas, je ne sais pas.
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'
Y a-t-il une raison pour laquelle vous le faites en SQL et pas en JMP ?Parce que je trouve cela BEAUCOUP plus facile dans JMP (et je me sens aussi plus robuste).
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>