Quantcast
Channel: Pasar datos de filas a columnas (dinamicas) - SQL Server 2008 - Stack Overflow en español
Viewing all articles
Browse latest Browse all 2

Pasar datos de filas a columnas (dinamicas) - SQL Server 2008

$
0
0

Estoy desarrollando una carga de datos parecido a un caso de una pregunta que se hizo hace unos días, solo que el mio varia un poco:

¿Cómo pasar datos de filas a columnas - SQL Server?

Aquí esta su código:

WITH ctePersonasArtefactos AS(    SELECT         p.IdPersona      ,         p.ApellidoPaterno,         p.ApellidoMaterno,         p.Nombre         ,         p.DNI            ,        p.FechaNacimiento,        d.Descripcion    AS DNombreArtefacto,        ROW_NUMBER() OVER( PARTITION BY p.IdPersona ORDER BY d.Descripcion) AS NumArtefacto    FROM Personas p    JOIN DArtefactos d ON p.IdDArtefactos = d.IdDArtefactos)SELECT IdPersona      ,        ApellidoPaterno,        ApellidoMaterno,        Nombre         ,        DNI            ,       FechaNacimiento,       MAX( CASE WHEN NumArtefacto = 1 THEN DNombreArtefacto END) AS DNombreArtefacto1,       MAX( CASE WHEN NumArtefacto = 2 THEN DNombreArtefacto END) AS DNombreArtefacto2,       MAX( CASE WHEN NumArtefacto = 3 THEN DNombreArtefacto END) AS DNombreArtefacto3,       MAX( CASE WHEN NumArtefacto = 4 THEN DNombreArtefacto END) AS DNombreArtefacto4,       MAX( CASE WHEN NumArtefacto = 5 THEN DNombreArtefacto END) AS DNombreArtefacto5,       MAX( CASE WHEN NumArtefacto = 6 THEN DNombreArtefacto END) AS DNombreArtefacto6FROM ctePersonasArtefactosGROUP BY IdPersona    ,        ApellidoPaterno,        ApellidoMaterno,        Nombre         ,        DNI            ,       FechaNacimiento;

Lo que me gustaría hacer es pasar datos de la filas a columnas, pero según viendo el caso anterior solo son máximo 6 columnas o bueno eso es lo que entiendo. Pero si tengo mas datos? Serían mas columnas aun pasando los 6...hay alguna forma de hacer columnas dinámicas osea para obtener N filas y pasarlas a N columnas? Me podrían ayudar por favor. :s

PD: Vi que un usuario lo respondió pero no de forma dinámica, y no le pude preguntar a el por el motivo de que stack overflow me pide mas puntos para preguntar en otro lados...

Mi codigo:

WITH PacientesDiagnosticos AS(    SELECT top 100        p.IdPaciente      ,        (p.ApellidoPaterno+''+p.ApellidoMaterno+''+p.PrimerNombre) as Nombres,        p.NroDocumento         ,        p.FechaNacimiento,        d.Descripcion    AS Dignostico,        ROW_NUMBER() OVER( PARTITION BY p.IdPaciente ORDER BY d.Descripcion) AS NumArtefacto    FROM Pacientes p    JOIN Atenciones a ON p.IdPaciente = a.IdPaciente    JOIN AtencionesDiagnosticos ad ON a.IdAtencion = ad.IdAtencion    JOIN Diagnosticos d ON ad.IdDiagnostico = d.IdDiagnostico)SELECT IdPaciente      ,        Nombres,       NroDocumento           ,       FechaNacimiento,       MAX( CASE WHEN NumArtefacto = 1 THEN Dignostico END) AS Dignostico1,       MAX( CASE WHEN NumArtefacto = 2 THEN Dignostico END) AS Dignostico2,       MAX( CASE WHEN NumArtefacto = 3 THEN Dignostico END) AS Dignostico3,       MAX( CASE WHEN NumArtefacto = 4 THEN Dignostico END) AS Dignostico4,       MAX( CASE WHEN NumArtefacto = 5 THEN Dignostico END) AS Dignostico5,       MAX( CASE WHEN NumArtefacto = 6 THEN Dignostico END) AS Dignostico6FROM PacientesDiagnosticosGROUP BY IdPaciente,        Nombres,        NroDocumento,       FechaNacimiento;

Fue adaptado con el codigo anterior


Viewing all articles
Browse latest Browse all 2

Latest Images

Trending Articles



Latest Images