Convertir filas en columnas, por grupos

7 views
Skip to first unread message

Carlos Admirador

unread,
Jul 6, 2023, 4:36:28 PM7/6/23
to AltNet-Hispano

Tengo esta tabla origen:
```
RequestId         Field                  Value
16 Type         1
16 SubType 1
16 Units                 1
16 Type         1
16 SubType 2
16 Units                 2
16 Type         3
16 SubType 6
16 Units                 1
```

El objetivo es obtener unos datos así, de 9 filas a 3 filas y sus 4 columnas:

```
RequestId          Type    SubType         Units
16 1 1 1
16 1 2 2
16 3 6       1
```

Intento hacer PIVOT, pero pide función de agregado, y además, cómo coger grupos de 3 en 3 filas
```
PIVOT
    (
 MIN(Units)
     FOR Field IN (Type,SubType,Units)
    ) as pvt
```

Alguna alternativa?

Carlos Admirador

unread,
Jul 23, 2023, 3:44:35 AM7/23/23
to AltNet-Hispano


A menos que haya una buena razón para asegurarse en el SQL que solo sean 3 registros por grupo, yo solamente me quedaría con el hecho de que los datos son así (según se observa en el ejemplo).

Para hacer un pivot siempre hay que usar una función de agregación, dado que nosotros sabemos que hay un registro de cada tipo, podemos usar indistintamente min() o max() para llenar ese requisito, con lo que esta consulta debiera devolver lo que buscas:

select * from (select idGestion, PeticionID, Field, Value from GestionSaliente ) t pivot (min(Value) for Field in (Type, SubType, Units) ) as pt;
Reply all
Reply to author
Forward
0 new messages