【问题标题】:Why are my results in SSRS different from SQL SMS?为什么我在 SSRS 中的结果与 SQL SMS 不同?
【发布时间】:2016-06-14 06:16:05
【问题描述】:

我以前从未见过这种情况发生,所以我很好奇是否有人知道原因,也许我可以如何纠正它。

我的代码的这个特定部分:

SELECT inv_num, co_line, 
    STUFF((
      SELECT '/' + rs2.inv_pro_description
      FROM @ReportSet rs2
      WHERE rs2.inv_num = rs.inv_num AND
        rs2.co_line = rs.co_line
      FOR XML PATH('')), 1, 1, '') as ipd_combo
FROM @ReportSet rs
WHERE inv_pro_seq IS NOT NULL AND inv_pro_description <> 'Less Previously Invoiced'
GROUP BY inv_num, co_line

导致我的两个结果的正确串联,例如,在这种情况下,“10% Advance/Fixed $5 Required”。但是,当在 SSRS 中使用此过程时,我的字段改为“固定需要 5 美元/10% 预付款”。

我已经习惯了能够根据运行的 SQL 查询来预测我的 SSRS 报告,所以这让我很困惑。

当然,我不太了解 STUFF / XML PATH 代码。我已经从其他人那里复制了它(自然是在这个网站上),所以我知道这可能与它有关。

【问题讨论】:

  • 我很偶然地发现,如果我将上面代码中的 '/' 替换为 ' / ',它就会正常工作。 (SQL SMS 不变)。原始代码有一个“,”,这产生了与“/”相同的问题。那么...添加这些空格的方法使 SSRS 开始工作?
  • ...现在它不工作了...再次。代码与之前没有什么不同,数据相同,等等。
  • 尝试添加一些order by 条件?
  • ...现在它正在工作...再次。而现在,不是。我所做的只是尝试在 SQL SMS 中运行查询的不同顺序并从报告中提取数据。这似乎是随机的,但我知道这是不可能的。
  • 您能否运行 SQL Profiler 跟踪并确认在运行 SSRS 报告时将哪些 SQL 发送到服务器?然后将其与您的 SSMS 查询进行比较?

标签: sql-server tsql reporting-services ssrs-2008-r2


【解决方案1】:

要获得一致的排序,请在您的内部选择中添加 order by 子句:

SELECT inv_num, co_line, 
    STUFF((
      SELECT '/' + rs2.inv_pro_description
      FROM @ReportSet rs2
      WHERE rs2.inv_num = rs.inv_num AND
        rs2.co_line = rs.co_line
      ORDER BY rs2.inv_pro_seq --********
      FOR XML PATH('')), 1, 1, '') as ipd_combo
FROM @ReportSet rs
WHERE inv_pro_seq IS NOT NULL AND inv_pro_description <> 'Less Previously Invoiced'
GROUP BY inv_num, co_line

注释的星号表示添加的行。

(我在 cmets 中回答,但在此处添加此内容是为了保持一致性/永久性)。

【讨论】:

  • 这是一个很好的提醒,提醒我要始终担心 ORDER。数据的存储方式看起来是随机的,尽管我知道它有一些潜在的原因,所以即使它看起来不需要它,订购它也是一个好主意。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多