У меня есть около 10 довольно сложных запросов SQL на SQL Server 2008 - но клиент хочет иметь возможность запускать их из своей внутренней сети (в отличие от нелокального веб-приложения) через Crystal Reports XI.
Внутренняя сеть клиента не позволяет нам (а) иметь доступ на запись к своей собственной базе данных и (б) не разрешать нам устанавливать промежуточный сервер SQL (то есть мы не можем настроить хранимые процедуры или другую очистку данных) .
SQL содержит несколько экземпляров row_number () over (разбиение по col1, col2) , , группирование по col1, col2 с кубом | rollup и / или (несколько) сводок .
Может ли это быть даже сделано? Все, что я прочитал, указывает на то, что это возможно только с помощью хранимой процедуры, и мне все равно нужно сначала извлечь данные из проприетарной базы данных.
Ниже приведена сокращенная версия одного из запросов (например, JOIN, не связанные непосредственно с функциональностью, предложения WHERE и полдюжины столбцов были удалены) ...
select sum(programID)
, sum([a.Asian]) as [Episodes - Asian], sum([b.Asian]) as [Eps w/ Next Svc - Asian], sum([c.Asian])/sum([b.Asian]) as [Avg Days to Next Svc - Asian]
, <i>etc... (repeats for each ethnicity)</i>
from (
select programID, 'a.' + ethnicity as ethnicityA, 'b.' + ethnicity as ethnicityB, 'c.' + ethnicity as ethnicityC
, count(*) as episodes, count(daysToNextService) as episodesWithNextService, sum(daysToNextService) as daysToNextService
from (
select programID, ethnicity, datediff(dateOfDischarge, nextDateOfService) as daysToNextService from (
select t1.userID, t1.programID, t1.ethnicity, t1.dateOfDischarge, t1.dateOfService, min(t2.dateOfService) as nextDateOfService
from TABLE1 as t1 left join TABLE1 as t2
on datediff(d, t1.dateOfService, t2.dateOfService) between 1 and 31 and t1.userID = t2.userID
group by t1.userID, t1.programID, t1.ethnicity, t1.dateOfDischarge, t1.dateOfService
) as a
) as a
group by programID
) as a
pivot (
max(episodes) for ethnicityA in ([A.Asian],[A.Black],[A.Hispanic],[A.Native American],[A.Native Hawaiian/ Pacific Isl.],[A.White],[A.Unknown])
) as pA
pivot (
max(episodesWithNextService) for ethnicityB in ([B.Asian],[B.Black],[B.Hispanic],[B.Native American],[B.Native Hawaiian/ Pacific Isl.],[B.White],[B.Unknown])
) as pB
pivot (
max(daysToNextService) for ethnicityC in ([C.Asian],[C.Black],[C.Hispanic],[C.Native American],[C.Native Hawaiian/ Pacific Isl.],[C.White],[C.Unknown])
) as pC
group by programID with rollup
Оооооооо .... может ли что-то подобное даже быть переведено в Crystal Reports XI?
Спасибо!