【问题标题】:Duplicated data in crystal reports水晶报表中的重复数据
【发布时间】:2014-05-05 16:40:30
【问题描述】:

我正在尝试从水晶报表中的 3 个表中加载数据。

在每一个中,我都有显示以下数据的存储过程:

代码是:

select distinct * from servicios where ID_Orden = @idordenrecibida

SELECT  distinct ID_orden, Consecutivo, Observaciones, Empleado, replace(convert(NVARCHAR, FechaEntrada, 103), ' ', '/') AS FechaEntrada, replace(convert(NVARCHAR, FechaSalida, 103), ' ', '/') AS FechaSalida, Recibe, PrecioFinal
FROM    OrdenesServicio
WHERE ID_Orden = @idordenrecibida

SELECT distinct * FROM equipos WHERE ID_Orden = @idordenrecibida

(CR发送的参数在接下来的快照中也是'8')

我想在我的报告中显示相同的结果,但是当我从 CR 调用这些过程时,报告显示了一些重复的结果:

它显示了一些重复的值,与过程的实际结果不同:S

嗯,表单中的代码如下:

        OrdenReport oRep = new OrdenReport();
        ParameterField Pf = new ParameterField();
        ParameterFields Pfs = new ParameterFields();
        ParameterDiscreteValue Pdv = new ParameterDiscreteValue();
        Pf.Name = "@idordenrecibida"; //nombre del parametro
        Pdv.Value = 8;
        Pf.CurrentValues.Add(Pdv);
        Pfs.Add(Pf);
        crystalReportViewer1.ParameterFieldInfo = Pfs;
        oRep.Load(@"..\..\OrdenReport.rpt");
        crystalReportViewer1.ReportSource = oRep;

这是表单的设计:

我跟随巫师的方式:

如果我在设计器中选择“不重复”选项,“Equipos”会完美显示,但“Servicios”仍然显示重复。事实上,“Equipos”的总数是“servicios”被复制的次数。我尝试修改关系,但仍然出现重复项。 我怎么能在该报告中获得与“exec”相同的数据而不会错误地重复相同的行?谢谢!!

编辑:

我发现只有当我想同时显示两个表的数据时,数据才会显示重复,所以当我从设计器中删除表servicios的字段时:

然后,我执行 control + Z,选择另一半部分(对应于 table equipos),然后按 supr。它显示:

但是,如果我想将两者一起显示,则会复制两个表之一的字段。我尝试移动到另一个部分,但只显示一个文件,而不是必须显示的 2 或 3。

如何才能在同一份报告中正确显示它们?

【问题讨论】:

  • 你能检查一下水晶生成的sql查询是正确的吗?我相信你知道如何检查 CR 中的 sql 查询
  • 我没有使用CR中的sql查询,我是直接从CR中调用存储过程,我只是在问题的开头添加了它们的代码

标签: c# sql .net sql-server crystal-reports


【解决方案1】:

如图所示,检查您的数据库字段是否被 _No 重复。使用任一字段,您的问题将得到解决。

【讨论】:

    【解决方案2】:

    您在 Crystal Reports 中获得的所有数据都基于一组行,这些行是通过将所有给定表连接或链接在一起而形成的。 Details 部分代表一行。当您将 leerEquiposleerServicios 放在同一个报告中时,它们会合并到同一组行中,如下所示:

    |ID_Equipo|ID_Servicio|ID_Orden|
    |60       |41         |8       |
    |61       |41         |8       |
    |60       |42         |8       |
    |61       |42         |8       |
    |60       |43         |8       |
    |61       |43         |8       |
    

    您有两个equipos 和三个servicios。由于它们是交叉连接的(以每个可能的组合组合),结果是六行。

    如果您想查看彼此完全分开的 Servicios 列表和 Equipos 列表,您需要两组完全独立的行(即一组两个 Equipo 行和一组三个 Servicio 行)。通常最安全的方法是使用子报表。

    如果 Servicios 和 Equipos 之间存在联系(当它们具有相同的 ID_Orden 时),您必须询问您希望在一行中看到什么信息:如果您希望每个 Servicio 有一行,则按 Servicio 和例如,您可以在汇总字段中插入计算机数量。如果您想要两行 - 每个 Equipo 一行,然后按 Equipo 分组。

    您可以在网上找到很多关于 Crystal Reports 中重复行的说明(和问题):
    Troubleshooting "Duplicate Records" in Crystal Reports
    Dealing with duplicate records or “table inflation”

    【讨论】:

      【解决方案3】:

      尝试Database 下的选项Select Distinct Records 排除重复记录。

      除此之外,我建议您检查链接为什么会产生重复记录。

      【讨论】:

      • 我已经在做。我刚刚在问题的开头添加了存储过程代码。
      • 那么问题是什么现在你仍然得到重复记录?
      • 是的,我在选择中总是有不同的,但是你可以看到“exec”的结果没有显示重复,但是水晶报告是的,所以我认为 CR 中的某些东西有问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-28
      • 1970-01-01
      • 2020-06-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多