pasar - sql transponer columnas a filas
Pivote valores cateĆ³ricos en columnas booleanas SQL (1)
prueba esto:
select ID,
col1A=(case when col1=''A'' then 1 else 0 end),
col1B=(case when col1=''B'' then 1 else 0 end)
from <table>
SI tiene una identificación con A y B y quiere tener una identificación distinta en la salida, puede hacerlo
select ID,
col1A=max(case when col1=''A'' then 1 else 0 end),
col1B=max(case when col1=''B'' then 1 else 0 end)
from <table>
group by id
EDITAR
Según su comentario, si no conoce la cantidad de opciones para col1, puede optar por PIVOT dinámico
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT distinct '','' + QUOTENAME(col1)
from <table>
FOR XML PATH(''''), TYPE
).value(''.'', ''NVARCHAR(MAX)'')
,1,1,'''')
set @query = ''SELECT id, '' + @cols + '' from <table>
pivot
(
count([col1])
for col1 in ('' + @cols + '')
) p ''
print(@query)
execute(@query)
Demostración de SQL Fiddle
Estoy buscando ''aplanar'' mi conjunto de datos para facilitar la extracción de datos. Cada columna categórica debe cambiarse a múltiples columnas booleanas. Tengo una columna con valores categóricos, por ejemplo:
ID col1
1 A
2 B
3 A
Estoy buscando una manera de pivotar esta tabla, y tengo una función agregada que me dice si esta identificación tiene valor A o B:
Resultado:
ID col1A col1B
1 1 0
2 0 1
3 1 0
Intenté usar PIVOT pero no tengo idea de qué función agregada usar dentro de ella.
También busqué respuestas en SF pero no pude encontrar ninguna ...
Estoy usando MS-SQL 2012.
¡Cualquier ayuda sería apreciada! Omri
EDITAR:
El número de categorías en col1 es desconocido, por lo tanto, la solución debe ser dinámica. Gracias :)