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

时间:2012-07-19 13:41:08

标签: sql reporting-services subquery reportbuilder3.0

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

使用以下示例数据:

enter image description here

我需要为每个feeRef返回一个为feeBudRec返回的值。每个feeBudRec的值对于每个单独的feeRef总是相同的(例如,对于feeRef LR01的每个数据行将具有1177的feeBudRec)。

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

我编写SQL查询的经验非常有限,但是通过搜索互联网,看起来我需要在我的SQL查询中加入一个子查询,以便为每个feeRef获得一个唯一的feeBudRec数字,并且每个费用得到最低费用的BudRec值的子查询.Ref应该对我有用。

根据我发现的示例,我认为以下子查询应该有效:

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

如果该子查询将获得正确的结果,任何人都可以帮我将其插入到我的报告查询中。否则,任何人都可以让我知道我需要做些什么才能获得每个费用的独特费用,以获得费用参考费用?

2 个答案:

答案 0 :(得分:0)

取决于确切的架构,但假设uvw_EarnerInfo列出没有重复的Pin,Ref和Rec,请尝试在查询结尾添加一个额外的列(在personOccupation之后),例如:

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

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

答案 1 :(得分:-1)

报表生成器的关键是从偏移量中获取正确的查询,然后让向导为您构建报表。手动构建报告需要付出艰辛的努力。 我暂时没有使用Report Builder,但在显示查询图形表示的报表的查询构建器中,您应该能够将列拖放到查询集中。向上拖动列并开箱即用(显示列)会导致报表在此列上中断。 如果以这种方式重构,则可能必须再次运行报告生成器以重新生成报告并对其进行重组。 一旦您对结构感到满意,您就可以开始添加摘要列。