SQL-如何在查询中插入子查询以检索唯一值

SQL-如何在查询中插入子查询以检索唯一值,sql,reporting-services,subquery,reportbuilder3.0,Sql,Reporting Services,Subquery,Reportbuilder3.0,我正在使用ReportBuilder3编写报告,我需要一些sql查询的帮助来获取唯一值 使用以下示例数据: 我需要能够为每个feeRef返回一个feeBudRec值。每个feeBudRec的值对于每个feeRef始终相同,例如,feeRef LR01的每个数据行的feeBudRec为1177 我需要为每个feeRef获取单个feeBudRec值的原因是,我需要能够合计feePin中每个feeRef的feeBudRec值,例如对于feePin LEE,我需要合计LR01和PS01的feeBudRe

我正在使用ReportBuilder3编写报告,我需要一些sql查询的帮助来获取唯一值

使用以下示例数据:

我需要能够为每个feeRef返回一个feeBudRec值。每个feeBudRec的值对于每个feeRef始终相同,例如,feeRef LR01的每个数据行的feeBudRec为1177

我需要为每个feeRef获取单个feeBudRec值的原因是,我需要能够合计feePin中每个feeRef的feeBudRec值,例如对于feePin LEE,我需要合计LR01和PS01的feeBudRec值,应为1177+1957,以获得总计3134;但是如果feeBudRec没有唯一的值,它将为每一行添加值,这将为8行返回11756个值

我编写SQL查询的经验非常有限,但从搜索internet来看,我似乎需要在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值吗?

报表生成器的关键是从偏移量中获得正确的查询,然后让向导为您构建报表。它省去了手工构建报告的所有辛苦工作。 我已经有一段时间没有使用报表生成器了,但是在显示查询图形表示的报表的查询生成器中,您应该能够在查询集中拖放列。将列向上拖出显示列的框会导致报告在此列上中断。 如果以这种方式重新构造,则可能需要再次运行报表生成器来重新生成报表并重新构造它。
一旦您对结构满意,您就可以开始添加摘要列。

取决于确切的架构,但假设uvw\u EarnerInfo列出了Pin、Ref和Rec,并且没有重复项,请尝试在查询结束时的personOccupation之后添加额外的列,例如:

feeBudRecSum = (Select SUM(FeeBudRec) From uvw_EarnerInfo x 
            where x.feePin = uvw_EarnerInfo.feePin
            Group By x.FeePin)

请注意,您不会在报告中对这些值求和。此栏应包含您要查找的总数。

谢谢您的回复。我应该提到,我以前使用过很多ReportBuilder,但我以前从来没有为报表提供过这样的唯一值。不幸的是,这不是正确格式化报告的问题。如果我将feeBudRec列作为一个组放在break的左侧,而不是报告细节的一部分,并尝试对feePin的feeBudRec值求和,我会得到与feeBudRec字段是细节的一部分时相同的错误结果。