pasar - transponer filas en columnas mysql
Transponer algunas columnas a filas usando pivot con SQL (2)
Hay algunas cosas que están mal con su consulta.
Primero, te falta una función agregada en tu PIVOT. Necesita un agregado alrededor de propertyvalue
.
En segundo lugar, debe rodear $row1
, etc. con corchetes, no comillas simples.
En tercer lugar, usaría un alias diferente para el as pivot
Como resultado, el código será:
select *
from
(
select name, propertyvalue, displayname
from indexrows
) a
pivot
(
max(propertyvalue)
for [displayname] in ([$row1], [$row2], [$row3])
) piv;
MS SQL Server 2012
Tengo una tabla llamada indexrows
name displayname propertyvalue
abc $row1 agg
abc $row2 spx
abc $row3 qqq
def $row1 spx
def $row2 qqq
Me gustaría transponer estos resultados para que se vean así.
name $row1 $row2 $row3
abc agg spx qqq
def spx qqq
Probé la siguiente consulta sin éxito. Me sale este error
Msg 156, nivel 15, estado 1, línea 10 Sintaxis incorrecta cerca de la palabra clave ''para''.
select *
from (
select
name,propertyvalue, displayname
from indexrows
) a
PIVOT
(
propertyvalue
for [displayname] in (''$row1'', ''$row2'', ''$row3'')
) as pivot
Cualquier ayuda es apreciada.
PIVOT necesita una función agregada, porque podría tener múltiples entradas en la tabla original. Si sabe que solo tiene un valor por clave, simplemente use MIN ().
Además, ''$ row1'', ''$ row2'', ''$ row3'' ahora son columnas y deben delimitarse como columnas
select *
from (
select
name,propertyvalue, displayname
from indexrows
) a
PIVOT
(
MIN(propertyvalue)
for [displayname] in ([$row1], [$row2], [$row3])
) as pivot