我有一份列出发票的水晶报告,我希望能够在报告的另一栏中显示发票的文件路径。以下查询允许我根据其唯一ID号搜索文档。然后它显示我搜索的一个文档的文件位置,但是我希望这适用于报告中列出的所有文档。有人可以帮我解决这个问题吗?
`DECLARE @entryID INT = 35793
SELECT dbo.toc.name AS DocumentName, dbo.doc.pagenum + 1 AS PageNum, dbo.vol.fixpath + '\' +
SUBSTRING(CONVERT(VARCHAR(8),CONVERT(VARBINARY(4), dbo.doc.storeid),2),1,2) + '\' +
SUBSTRING(CONVERT(VARCHAR(8),CONVERT(VARBINARY(4), dbo.doc.storeid),2),3,2) + '\' +
SUBSTRING(CONVERT(VARCHAR(8),CONVERT(VARBINARY(4), dbo.doc.storeid),2),5,2) + '\' +
CONVERT(VARCHAR(8),CONVERT(VARBINARY(4), dbo.doc.storeid),2) + '.TIF' AS FullPathAndFilename
FROM dbo.doc
LEFT JOIN dbo.toc ON dbo.doc.tocid = dbo.toc.tocid
LEFT JOIN dbo.vol ON dbo.toc.vol_id = dbo.vol.vol_id
WHERE dbo.doc.tocid = @entryID
ORDER BY dbo.doc.pagenum`
答案 0 :(得分:0)
答案取决于您当前在现有Crystal Report中检索数据的方式。
选项A:如果您的报告数据源是“命令”(换句话说,您已在水晶报告中编写了一个SQL语句来检索您需要的数据),那么您将需要修改该命令以通过子查询提取此新信息。因此,例如,如果您当前的报告SQL类似于“选择x。*从foo作为x”,您可能希望它类似于:
select x.*,
(SELECT dbo.vol.fixpath + '\'
+ SUBSTRING(CONVERT(VARCHAR(8),CONVERT(VARBINARY(4), dbo.doc.storeid),2),1,2) + '\'
+ SUBSTRING(CONVERT(VARCHAR(8),CONVERT(VARBINARY(4), dbo.doc.storeid),2),3,2) + '\'
+ SUBSTRING(CONVERT(VARCHAR(8),CONVERT(VARBINARY(4), dbo.doc.storeid),2),5,2) + '\'
+ CONVERT(VARCHAR(8),CONVERT(VARBINARY(4), dbo.doc.storeid),2)
+ '.TIF' AS FullPathAndFilename
FROM dbo.doc
LEFT JOIN dbo.toc ON dbo.doc.tocid = dbo.toc.tocid
LEFT JOIN dbo.vol ON dbo.toc.vol_id = dbo.vol.vol_id
WHERE dbo.doc.tocid = x.tocid //this line joining the new SQL to all report rows
)
from foo as x;
选项B:如果您使用连接向导从Crystal中提取数据,那么最好在数据库中创建一个与您提供的SQL相匹配的新视图(减去最后一个) 2行),然后在Crystal join向导中将现有主报表附加到此视图。