Guten Morgen,
Angehängt ist ein Skript, das ich geschrieben habe und das erfüllt, was ich brauche.
Grundsätzlich erstellt es Paare aus aufeinanderfolgenden (von links nach rechts) Zellen, ausgehend von (1,2), (1,3), ..., (1, k), (2, 3), ..., (k -1, k)
Dann stapelt er sie und beschriftet sie.
Weiß jemand, wie man dasselbe in SQL erreicht.
Vielen Dank im Voraus!
Aufrichtig,
MG
Danke @vince_faller ,
Ihr JSL-Ansatz ist definitiv raffinierter als die doppelten for-Schleifen.
Vielen Dank für das Zeigen der nchoosekmatrix-Funktion!
Aufrichtig,
MG
Wenn Sie die Tabellen transponieren, können Sie sich auf t1.row < t2.row verbinden.
Dieses Skript hat für mich funktioniert, geht aber von 1 Zeile aus (was ich bezweifle, aber Sie könnten eine einzelne Zeile auswählen), ich musste auch eine ID-Spalte zum Transponieren und eine row_Number hinzufügen.Die Zeilennummer ist nach dem Spaltennamen sortiert. Wenn das nicht funktioniert, weiß ich es nicht.
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'
Gibt es einen Grund, warum Sie es in SQL und nicht in JMP tun?Weil ich das in JMP VIEL einfacher finde (und ich fühle mich auch robuster).
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>