Generar todas las combinaciones de valores con una lista de valores establecida para cada carácter en SQL.
Tengo un conjunto de datos que se ve así:
Posición | Valor |
---|---|
1 | 1 |
1 | 2 |
1 | 3 |
2 | 8 |
3 | 5 |
3 | 6 |
Y me gustaría generar todas las combinaciones de cadenas con el valor en cada posición.
Para este ejemplo, la salida se vería así:
Salida |
---|
185 |
285 |
385 |
186 |
286 |
386 |
El orden no importa particularmente.
Nota: Puede haber una cantidad arbitraria de grupos y valores por grupo.
El SQL a continuación configura la entrada de ejemplo.
Declare @Table Table
(
grupoId int,
valor int
)
Insert Into @Tabla
Seleccionar 1,1
unión seleccionar 1,2
unión seleccionar 1,3
unión seleccionar 2,8
unión seleccionar 3,5
unión seleccionar 3,6
Seleccionar
*
Desde
@Tabla
davy.ai
Para generar todas las combinaciones de cadenas con el valor en cada posición, podemos usar una combinación de CTEs y concatenación de cadenas:
Veamos cómo funciona esto:
master..spt_values
.STUFF
,SUBSTRING
yCHARINDEX
para concatenar los valores de cada groupId en una cadena separada por comas en cada posición, usando la tabla temporal N para iterar sobre las posiciones de la cadena. La salida final se ordena alfabéticamente.La salida resultante coincide con la salida deseada en la pregunta: