【问题标题】:SQL - How to insert a subquery into a query in order to retrieve unique valuesSQL - 如何将子查询插入到查询中以检索唯一值
【发布时间】: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


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 感谢您的回复。我应该提到我以前使用过很多报表生成器,但我以前从未需要为报表获取这样的唯一值。不幸的是,这不是正确格式化报告的问题。如果我将 feeBudRec 列放在中断的左侧(即,作为一个组,而不是报告详细信息的一部分)并尝试对 feePin 的 feeBudRec 的值求和,我会得到相同的错误结果(加起来一个 feeBudRec如果feeBudRec 字段是详细信息的一部分,则为每个feeRef 的每一行数据的值)。
      猜你喜欢
      • 1970-01-01
      • 2015-08-10
      • 1970-01-01
      • 2020-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-06
      • 1970-01-01
      相关资源
      最近更新 更多