la búsqueda de número de días entre dos fechas para hacer una columnas dinámicas

StackOverflow https://stackoverflow.com/questions/2475893

  •  21-09-2019
  •  | 
  •  

Pregunta

Hola a todos, tengo una consulta de selección que en la actualidad produce los siguientes resultados:

Equipo DoctorName 1 2 3 4 5 6 7 ... 31 Visitado
Dr. Como A x x ... 2 veces | Dr. Sc A x ... 1 veces | Dr. Gh B x 1 ... veces | Dr. Nd C ... x 1 veces |

El uso de la siguiente consulta:

DECLARE @startDate = '1/1/2010', @enddate = '1/31/2010'
SELECT d.doctorname,
         t.teamname,
         MAX(CASE WHEN ca.visitdate = 1 THEN 'x' ELSE NULL END) AS 1,
         MAX(CASE WHEN ca.visitdate = 2 THEN 'x' ELSE NULL END) AS 2,
         MAX(CASE WHEN ca.visitdate = 3 THEN 'x' ELSE NULL END) AS 3,
         ...
         MAX(CASE WHEN ca.visitdate = 31 THEN 'x' ELSE NULL END) AS 31,
         COUNT(*) AS visited
    FROM CACTIVITY ca
    JOIN DOCTOR d ON d.id = ca.doctorid 
    JOIN TEAM t ON t.id = ca.teamid
   WHERE ca.visitdate BETWEEN @startdate AND @enddate
GROUP BY d.doctorname, t.teamname

El problema es que quiero hacer la columna de la fecha son dinámicos por ejemplo, si ca.visitdate ENTRE '2/1/2012' Y '2/29/2012' por lo que el resultado será:

Equipo DoctorName 1 2 3 4 5 6 7 ... 29 Visitado
Dr. Como A x x ... 2 veces | Dr. Sc A x ... 1 veces | Dr. Gh B x 1 ... veces | Dr. Nd C ... x 1 veces |


¿Puede alguien ayudarme cómo conseguir número de días entre dos fechas y ayúdame revisó la consulta, por lo que puede bucle MAX (CASO CUANDO ca.visitdate = 1 entonces 'x' END ELSE NULL) AS 1 tantas como el número de días? Por favor, por favor

¿Fue útil?

Solución

La regla básica en SQL es que cualquier consulta construida dado siempre devolverá las mismas columnas -. En términos de cuántos hay, sus nombres y sus tipos

Por lo que estaría buscando en un enfoque de SQL dinámico para construir la consulta sobre la marcha, si todavía quiere ir por ese camino. De lo contrario, podría ser digno de mirar si se puede suprimir columnas vacías en un nivel más alto (esto se va a algún tipo de procesador de informes - tales como los servicios o informes de cristal de informes de SQL)

editar 1

Es posible que desee agregar columnas adicionales a su consulta, tales como:

CASE CUANDO DATEPART (mes, @ StartDate) = DATEPART (mes, DATEADD (días, 29, @ StartDate)) ENTONCES 1 ELSE 0 END como ShowColumn29

(y lo mismo para los otros números). ¿Cómo entonces el uso que en Reporting Services, I @ ma poco vago, pero yo creo que se puede añadir un cuadro de texto oculto en algún lugar de su informe que se une al valor ShowColumn29, y luego establecer la visibilidad de la columna "29" del informe de el valor de este cuadro de texto.

Lo sentimos - No soy tan bueno con los servicios de información, pero es de esperar que puedo jugar con este tipo de concepto y hacer que funcione

?
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top