SQL - crear matriz sql

 
Vista:
sin imagen de perfil
Val: 8
Ha aumentado su posición en 2 puestos en SQL (en relación al último mes)
Gráfica de SQL

crear matriz sql

Publicado por JOSUE (18 intervenciones) el 31/08/2022 20:56:03
buenas tardes
necesito ayuda para crear un calendario en forma de matriz de especialidades por cada medico por fecha
ejemplo

especialidad..........medico........total citado..... fecha
medicina interna....osorio.........4......................2022-08-31
medicina interna....carcamo.....5......................2022-08-31
medicina interna....mejia..........10.....................2022-08-31


y necesito lo siguiente
fecha citado.............especialidad..............osorio..............carcamo...........mejia (estos son encabezados)
2022-08-31...............medicina interna........4.....................5.......................10

los campos son: CITADO, ESPECIALIDAD, MEDICO.
CITADO es la fecha de citado
ESPECIALIDAD es el nombre de la especialidad que da el medico
MEDICO es el nombre del medico. La cantidad de medico varia segun la especialidad es decir en medicina interna hay 3 medicos, en nefrologia hay 5 medicos.

la tabla se llama BITACORA

gracias de antemano
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias
Val: 2.542
Oro
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

crear matriz sql

Publicado por Isaias (1921 intervenciones) el 01/09/2022 18:29:54
Eso se conoce como PIVOT

https://docs.microsoft.com/en-us/sql/t-sql/queries/from-using-pivot-and-unpivot?view=sql-server-ver16
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 8
Ha aumentado su posición en 2 puestos en SQL (en relación al último mes)
Gráfica de SQL

crear matriz sql

Publicado por JOSUE (18 intervenciones) el 08/09/2022 21:39:35
NO FUNCIONA. YA PROBE Y NO HACE EL CONTEO.
LO QUE NECESITO QUE LOS CAMPOS "FECHA_CITADO" HAGA EL CONTEO DE CUANTOS PACIENTES TIENE POR CADA FECHA, "ESPECIALIDAD" QUEDEN COMO NORMALMENTE QUEDAN COMO ENCABEZADO PERO EL CAMPO "MEDICO" SE CONVIERTA EN ENCABEZADO AUTOMATICAMENTE DE ACUERDO A LA SELECCION DE LA ESPECIALIDAD. EJEMPLO:

LOS CAMPOS "VARIOS" SON LOS MEDICOS EN LA ESPECIALIDAD MEDICINA INTERNA
FECHA_CITADO................ESPECIALIDAD............ VARIOS 7AM......VARIOS 1PM
08/SEPTIEMBRE/2022......MEDICINA INTERNA.........4..........................7 (4 Y 7 SON LA CANTIDAD DE PACIENTES CITADOS)
09/SEPTIEMBRE/2022......MEDICINA INTERNA.........5..........................4

LOS CAMPOS "SELENA, JUAN, PABLO, MERLIN" SON LOS MEDICOS EN LA ESPECIALIDAD ALTO RIESGO
FECHA_CITADO................ESPECIALIDAD............ SELENE......JUAN.....PABLO.......MERLIN
08/SEPTIEMBRE/2022......ALTO RIESGO..................6...................7..............3...............2
09/SEPTIEMBRE/2022......ALTO RIESGO..................5...................2..............0...............1

LA CANTIDAD DE MEDICOS CAMBIA DEACUERDO A LA ESPECIALIDAD.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 8
Ha aumentado su posición en 2 puestos en SQL (en relación al último mes)
Gráfica de SQL

crear matriz sql

Publicado por JOSUE (18 intervenciones) el 09/09/2022 19:49:15
ASI FUNCIONA DE FORMA MANUAL.

USE ADMISION
SET LANGUAGE SPANISH
DECLARE @ESP varchar(MAX)
DECLARE @INICIO DATE
DECLARE @FINAL DATE
SET @INICIO=FORMAT(CONVERT(DATE,GETDATE(),0),'dd/MMMM/yyyy')
SET @FINAL=FORMAT((SELECT MAX(FECHA_CITADO) FROM BITACORA),'dd/MMMM/yyyy')
SET @ESP='MEDICINA INTERNA'

SELECT* FROM
(SELECT UPPER(FORMAT(CONVERT(DATE,FECHA_CITADO, 0), 'dd/MMMM/yyyy')) AS CITADO,
ESPECIALIDAD, MEDICO, FECHA_CITADO FROMBITACORA
WHERE ESPECIALIDAD=@ESP AND FECHA_CITADO BETWEEN @INICIO AND @FINAL) TEMP
PIVOT (COUNT(CITADO) FORMEDICO in ("VARIOS 7AM", "VARIOS 1PM")) AS FPV ORDER BY FECHA_CITADO ASC

PERO LO QUE NECESITO QUE EL PIVOT SEA DINAMICO ES DECIR QUE EL CAMPO "MEDICO" CAMBIE AL SELECCIONAR OTRA ESPECIALIDAD
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 8
Ha aumentado su posición en 2 puestos en SQL (en relación al último mes)
Gráfica de SQL

crear matriz sql

Publicado por JOSUE (18 intervenciones) el 09/09/2022 22:37:26
YA ME FUNCIONO EL PIVOT DINAMICO

SET LANGUAGE SPANISH
DECLARE @ESP VARCHAR(MAX)
DECLARE @INICIO VARCHAR(MAX)
SET @ESP='MEDICINA GENERAL'
SET @INICIO='CONVERT(DATE,GETDATE())'
DECLARE @SQL VARCHAR(MAX)
SET @SQL =''
SELECT @SQL=@SQL+'['+ B.MEDI+'], ' FROM (SELECT DISTINCT CAST(NOMBRE AS VARCHAR(16)) AS MEDI
FROM MEDICO WHERE ESPECIALIDAD=@ESP AND ESTADO='ACTIVO') B
SET @SQL=LEFT(@SQL, LEN (@SQL)-1) /*QUITA EL ULTIMO CARACTER*/
EXECUTE ('SELECT * FROM
(SELECT UPPER(FORMAT(CONVERT(DATE,FECHA_CITADO, 0), ''dd/MMMM/yyyy'')) AS CITADO,
ESPECIALIDAD, MEDICO, FECHA_CITADO
FROM BITACORA WHERE
ESPECIALIDAD='''+@ESP+''' AND FECHA_CITADO>='+@INICIO+'
) TEMP
PIVOT (COUNT(CITADO) FOR MEDICO IN ('+@SQL+')) AS FPV
ORDER BY FECHA_CITADO ASC')
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar