найти количество дней между двумя датами, чтобы сделать динамические столбцы - PullRequest
1 голос
/ 19 марта 2010

Дорогие все, у меня есть запрос на выборку, который в настоящее время дает следующие результаты:

DoctorName Team 1 2 3 4 5 6 7 ... 31 Посещенных
др. Как х х ... 2 раза
др. Sc A x ... 1 раз
др. Gh B x ... 1 раз
др. Nd C ... x 1 раз

Используя следующий запрос:

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

проблема в том, что я хочу, чтобы столбец даты был динамическим, например, если ca.visitdate МЕЖДУ '1/1/2012' И '29.02.2012' поэтому результат будет:

DoctorName Team 1 2 3 4 5 6 7 ... 29 Посещенных
др. Как х х ... 2 раза
др. Sc A x ... 1 раз
др. Gh B x ... 1 раз
др. Nd C ... x 1 раз


Может ли кто-нибудь помочь мне получить число дней между двумя датами и помочь мне пересмотреть запрос, чтобы он мог зацикливать MAX (CASE WHEN ca.visitdate = 1 THEN 'x' ELSE NULL END) AS 1 столько же, сколько дней? Пожалуйста, пожалуйста

1 Ответ

0 голосов
/ 19 марта 2010

Основное правило в SQL состоит в том, что любой заданный составленный запрос всегда будет возвращать одни и те же столбцы - с точки зрения их количества, их имен и типов.

Так что вы будете искать динамический подход SQL для построения запроса на лету, если вы все еще хотите пойти по этому пути. В противном случае, возможно, стоит посмотреть, можно ли подавить пустые столбцы на более высоком уровне (это относится к какой-либо форме обработчика отчетов - например, к службам отчетов SQL или кристальным отчетам?)

редактировать 1

Возможно, вы захотите добавить дополнительные столбцы к вашему запросу, например:

СЛУЧАЙ, КОГДА DATEPART (месяц, @ StartDate) = DATEPART (месяц, DATEADD (день, 29, @ StartDate)), ТОГДА 1 Иначе 0 КОНЕЦ как ShowColumn29

(и аналогично для других номеров). То, как вы затем используете это в службах Reporting Services, я немного неопределенная, но я думаю, что вы можете добавить скрытое текстовое поле где-то в вашем отчете, которое привязывается к значению ShowColumn29, а затем установить видимость столбца «29» отчета как значение этого текстового поля.

Извините - я не очень хорош в службах отчетности, но, надеюсь, вы сможете поиграть с такой концепцией и заставить ее работать?

...