Tsql 在水晶报表席中创建复杂SQL查询的可行性

Tsql 在水晶报表席中创建复杂SQL查询的可行性,tsql,crystal-reports-xi,Tsql,Crystal Reports Xi,我在SQL Server 2008上有大约10个相当复杂的SQL查询,但是客户希望能够通过他们的内部网络来运行它们,而不是通过非晶本地Web应用程序通过水晶报表席。 客户端的内部网络不允许我们对其专有数据库具有写访问权限,也不允许我们设置中间SQL server,这意味着我们无法设置存储过程或其他数据清理 SQL包含按col1、col2划分的多个行数实例、按col1分组的多个行数实例、带有多维数据集|汇总的多个列数实例和/或多个数据透视 这能做到吗?我读到的所有内容似乎都表明,这只能通过存储过程

我在SQL Server 2008上有大约10个相当复杂的SQL查询,但是客户希望能够通过他们的内部网络来运行它们,而不是通过非晶本地Web应用程序通过水晶报表席。 客户端的内部网络不允许我们对其专有数据库具有写访问权限,也不允许我们设置中间SQL server,这意味着我们无法设置存储过程或其他数据清理

SQL包含按col1、col2划分的多个行数实例、按col1分组的多个行数实例、带有多维数据集|汇总的多个列数实例和/或多个数据透视

这能做到吗?我读到的所有内容似乎都表明,这只能通过存储过程实现,而且我仍然需要首先从专有数据库中提取数据

下面是其中一个查询的精简版本,例如,与功能不直接相关的连接,其中子句和六列已被删除


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]
    , etc... (repeats for each ethnicity)
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
苏呜呜。。。。这样的东西能被翻译成水晶报告席吗?
谢谢

当您创建报表而不是选择表或存储过程时,请选择add命令


这将允许您在其中放入所需的任何有效TSQL语句。使用通用表表达式CTE和内联视图,我成功地创建了一些相当大的复杂语句,超过了Oracle和SQL Server的400行,因此它确实是可行的,但是,如果你使用参数,你应该考虑使用SPEXECUTESQL,你必须知道如何避免SQL注入。< /P>如果他们没有访问内部网络的数据,他们将如何运行报告?他们这样做;到目前为止,他们每周都会将其专有数据库导出到我们的web应用程序中。您怎么知道高级SQL技术甚至会对其专有数据库起作用?先进的技术往往是数据库专用的。这正是我试图找出这是否可以转化为Crystal Reports的原因:您知道这是否只是将命令传输到db服务器?后端只能通过ODBC访问,不是MSSQL或Oracle服务器,因此无法单独处理T-SQL。这需要在Crystal Reports服务器上进行。是的,命令将发送到DB服务器并在那里执行,然后返回到报告。顺便说一句,既然您将其标记为TSQL,那么这是Sybase吗?我没有关于其后端的任何信息,只是它是某种专有系统。我将其标记为TSQL,因为这是我在针对我们导出的db版本的运行中编写的原始查询。只要db允许内联视图,它仍然是可行的,我不知道有任何内联视图不允许,但避免SQL注入可能会引起关注;它似乎不支持ROLLUP、CUBE或row_number,因此如果Crystal Reports中没有这些功能,这看起来是一个死项目。我认为你的答案是正确的-我感谢你的帮助!