【发布时间】:2012-07-19 13:41:08
【问题描述】:
我正在使用 Report Builder 3 编写报告,我需要一些有关 sql 查询的帮助以获取唯一值。
使用以下示例数据:
我需要能够为每个feeRef 返回一个feeBudRec 值。对于每个单独的 feeRef,每个 feeBudRec 的值始终相同(例如,对于 feeRef LR01 的每个数据行,feeBudRec 的值为 1177)。
我需要为每个feeRef 获取单个feeBudRec 值的原因是我需要能够合计feePin 中每个feeRef 的feeBudRec 值(例如,对于feePin LEE,我需要合计LR01 的feeBudRec 值和 PS01,应该是 1177 + 1957 得到总共 3134;但是如果我没有唯一的 feeBudRec 值,它将添加每一行的值,这将为 8 个 LEE 行带来总共 11756 )。
我编写 SQL 查询的经验非常有限,但是从互联网搜索来看,我似乎需要在我的 SQL 查询中放入一个子查询,以便为每个 feeRef 获得一个唯一的 feeBudRec 数字,并且为每个 feeRef 获取最小 feeBudRec 值的子查询应该对我有用。
根据我找到的示例,我认为以下子查询应该可以工作:
SELECT a.feeRef, a.feeBudRec
FROM (
SELECT uvw_EarnerInfo.feeRef, Min(uvw_EarnerInfo.feeBudRec) as AvailableTime
FROM uvw_EarnerInfo
GROUP BY
uvw_EarnerInfo.feeRef
) as x INNER JOIN uvw_EarnerInfo as a ON a.feeRef = x.feeRef AND a.feeBudRec = x.AvailableTime;
问题是我不知道如何将该子查询插入到我用来生成报告的查询中(如下所示):
SELECT
uvw_EarnerInfo.feeRef
,uvw_EarnerInfo.PersonName
,uvw_EarnerInfo.PersonSurname
,uvw_EarnerInfo.feePin
,uvw_RB_TimeLedger.TimeDate
,uvw_RB_TimeLedger.matRef
,uvw_RB_TimeLedger.TimeTypeCode
,uvw_RB_TimeLedger.TimeCharge
,uvw_RB_TimeLedger.TimeElapsed
,uvw_WoffTimeByTime.WoffMins
,uvw_WoffTimeByTime.WoffCharge
,uvw_EarnerInfo.feeBudRec
,uvw_EarnerInfo.personOccupation
FROM
uvw_RB_TimeLedger
LEFT OUTER JOIN uvw_WoffTimeByTime
ON uvw_RB_TimeLedger.TimeId = uvw_WoffTimeByTime.TimeId
RIGHT OUTER JOIN uvw_EarnerInfo
ON uvw_EarnerInfo.feeRef = uvw_RB_TimeLedger.feeRef
WHERE
uvw_RB_TimeLedger.TimeDate >= @TimeDate
AND uvw_RB_TimeLedger.TimeDate <= @TimeDate2
如果该子查询将获得正确的结果,任何人都可以帮我将它插入到我的报告查询中。否则,谁能让我知道我需要做什么才能为每个feeRef 获得唯一的feeBudRec 值?
【问题讨论】:
标签: sql reporting-services subquery reportbuilder3.0