Buenos dias,
Se adjunta un script que escribí que logra lo que necesito.
Básicamente, crea pares de celdas secuenciales (de izquierda a derecha), desde (1,2), (1,3), ..., (1, k), (2, 3), ..., (k -1, k)
Luego los apila y los etiqueta.
¿Alguien sabe cómo lograr lo mismo en SQL?
¡Gracias por adelantado!
Sinceramente,
mg
Gracias @vince_faller ,
Su enfoque JSL es definitivamente más ingenioso que el doble para bucles.
¡Muchas gracias por mostrar la función nchoosekmatrix!
Sinceramente,
mg
Si transpone las tablas, puede unirse a sí mismo en t1.row
Esta secuencia de comandos funcionó para mí, pero asume 1 fila (que dudo que sea cierto, pero podría seleccionar una sola fila), también tuve que agregar una columna de ID para transponer y un número de fila.El número de fila está ordenado por el nombre de la columna, así que si eso no funciona, no lo sé.
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'
¿Hay alguna razón por la que lo estés haciendo en SQL y no en JMP?Porque encuentro esto MUCHO más fácil en JMP (y también me siento más robusto).
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>