我正在SSRS Report Builder 2016中创建报告。
我有一组数据,其中包含一组代理机构以及每个月向每个代理机构收取的费用金额(总计帐单)。每个代理商可以为TotalBilled设置多个值。我想找到每个代理商的模式TotalBilled值。
我在查询中计算了模式值,但它取自所有代理商中的所有TotalBilled,而不仅仅是与我在参数中设置的代理商相关的TotalBilled。
这是我的数据集:
Select
a.AgencyID
a.startdate,
a.enddate,
[TotalBilled],
(SELECT TOP 1 WITH TIES TotalBilled
From invoiceLine I
WHERE TotalBilled <> 0
GROUP BY TotalBilled
ORDER BY Count(invl.TotalBilled) DESC ) AS ModeTotalBilled
from Agency a
left join invoiceLine invl
on a.InvoiceID = invl.InvoiceID
where (a.agencyid in (@agency))
and (a.startdate >= @startdate and a.enddate <= @enddate)
我试图在模式查询中加入代理商,但在运行时导致错误
(SELECT TOP 1 WITH TIES TotalBilled
From invoiceLine I
WHERE TotalBilled <> 0
AND a.InvoiceID = I.InvoiceID
GROUP BY TotalBilled
ORDER BY Count(invl.TotalBilled) DESC ) AS ModeTotalBilled
错误:
“无法读取数据集DataSet1的下一个数据行。(rsErrorReadingNextDataRow)
在报表处理期间发生错误。 (rsProcessingAborted)”
什么是更改我的模式值计算的正确方法,以使其受我的代理商参数影响,而不仅仅是从整个数据库中提取?
答案 0 :(得分:1)
这是您要寻找的吗?
SELECT a.AgencyID, a.startdate, a.enddate,
(SELECT TOP (1) i.TotalBilled
FROM invoiceLine i
WHERE i.TotalBilled <> 0 AND a.InvoiceID = i.InvoiceID
GROUP BY i.TotalBilled
ORDER BY COUNT(i.TotalBilled) DESC
) as ModeTotalBilled
FROM Agency a
WHERE a.agencyid = @agency AND
a.startdate >= @startdate AND
a.enddate <= @enddate;
我不明白您为什么要在外部查询中加入invoice
。您应该对所有列名进行限定,尤其是在使用相关子查询时。
TOP (1) WITH TIES
在子查询中没有任何意义。如果一个以上的值符合模式,那么所有要做的就是返回错误。