Tengo una instancia de SQL Server que tiene un servidor vinculado a un servidor Oracle. Hay una tabla en el servidor de Oracle llamada PersonOptions
que contiene los siguientes datos:
╔══════════╦══════════╗
║ PersonID ║ OptionID ║
╠══════════╬══════════╣
║ 1 ║ A ║
║ 1 ║ B ║
║ 2 ║ C ║
║ 3 ║ B ║
║ 4 ║ A ║
║ 4 ║ C ║
╚══════════╩══════════╝
Necesito pivotar esos datos para que los resultados sean:
╔══════════╦═════════╦══════════╦══════════╗
║ PersonID ║ OptionA ║ Option B ║ Option C ║
╠══════════╬═════════╬══════════╬══════════╣
║ 1 ║ 1 ║ 1 ║ ║
║ 2 ║ ║ ║ 1 ║
║ 3 ║ ║ 1 ║ ║
║ 4 ║ 1 ║ ║ 1 ║
╚══════════╩═════════╩══════════╩══════════╝
¿Alguna sugerencia?
fuente
where a.personId = a2.personId order by a2.personId for xml path('')
. a2 es la tabla en la subconsulta. Luego separo los datos en Excel usando texto en columnas con coma como delimitador. Esperaba encontrar una manera de hacer esto en sql regular sin tener que escribir un procedimiento, pero tal vez no haya manera. Tengo que correr en este momento, pero intentaré publicar un ejemplo para explicarlo mejor.Esto sería el equivalente en la sintaxis de SQL Server. Según mi lectura de los documentos de Oracle, NULLIF y PIVOT parecen tener el mismo formato que sus parientes de SQL Server. El desafío será la lista dinámica que debe ser estática a menos que haga que la consulta sea dinámica como lo demuestra Itzik, pero no tengo idea si eso se puede traducir a P / SQL
fuente
Prefiero realizar consultas dinámicas manualmente, pero también puede usarlas
PIVOT
.fuente
PIVOT
sintaxis es más complicada en comparación con el enfoque que uso. Sin embargo, soy consciente de que ambos dan el mismo resultado, y estoy de acuerdo en que otras personas pueden pensar lo contrario.