【问题标题】:How to display data in crystal report without duplicating the data?如何在不复制数据的情况下在水晶报表中显示数据?
【发布时间】:2014-01-27 16:44:11
【问题描述】:

我在使用左连接在水晶报表中显示数据时遇到问题,因为即使我在 sqlcommand 中使用 GROUP BY,它也会复制我的数据。

这是我的表格列表:

table 1: complaint

table 2: errordesc (error description)

这是我在水晶报表中的代码:

    Dim objConn As MySqlConnection
    Dim daT1, daT2 As MySqlDataAdapter
    Dim activecomp As DataSet
    Dim strConnection As String
    Dim strSQL As String

    strConnection = "server=localhost;user id=root;password=;database=ticketing_system;"
    objConn = New MySqlConnection(strConnection)
    objConn.Open()

    strSQL = "SELECT * FROM errordesc LEFT JOIN complaint ON errordesc.tran_no=complaint.tran_no WHERE errordesc.status='On-process' group by errordesc.err_id "
    daT1 = New MySqlDataAdapter(strSQL, objConn)
    activecomp = New DataSet
    daT1.Fill(activecomp, "comp")
    daT1.Fill(activecomp, "active")

    Dim rpt As New CrystalReport1
    rpt.SetDataSource(activecomp)
    CrystalReportViewer1.ReportSource = rpt

    objConn.Close()

我的结果是这样的:

它重复了我的 errordesc.err_id,即使我认为它是分组的。 :(如果有人知道请帮忙。提前谢谢...

【问题讨论】:

  • 你仍然需要在 (complaint, errordesc) 上使用 JOIN 来做你想做的事,就像你之前问过stackoverflow.com/q/21247358/1070452 COMPLAINT 应该有一个错误描述的外键,这似乎有点缺失显示的数据库。如图所示,似乎没有关系
  • 我已经使用了 join sir 但输出是一样的
  • ...你说过,但你从来没有向我们展示过 SQL...他们加入了哪一列?
  • 除了左连接之外,您知道这有什么问题吗?我已经使用了左连接先生,但输出是一样的。
  • 您需要提供每个表数据的样本。此外,为什么不直接针对数据库创建一个报告呢?在代码中这样做是不必要的复杂。

标签: vb.net crystal-reports sap


【解决方案1】:

我认为删除重复行的简单方法是更改​​您的 strSQL:

strSQL = "SELECT DISTINCT * FROM errordesc LEFT JOIN "+
    "complaint ON errordesc.tran_no=complaint.tran_no "+
    "WHERE errordesc.status='On-process' group by errordesc.err_id "

【讨论】:

  • 不要工作,先生。输出是一样的。唔。也许在我的数据集上是问题,或者我必须在我的数据集中链接两个表,然后才能在 mysql 中设置命令
【解决方案2】:

哦。我通过将我的水晶报告编码为这样解决了我自己的问题:

Dim objConn As MySqlConnection
    Dim daT1, daT2 As MySqlDataAdapter
    Dim activecomp As DataSet
    Dim strConnection As String
    Dim strSQL As String

    strConnection = "server=localhost;user id=root;password=;database=ticketing_system;"
    objConn = New MySqlConnection(strConnection)
    objConn.Open()


    strSQL = "SELECT * FROM errordesc WHERE errordesc.status='On-process' group by errordesc.err_id "
    daT1 = New MySqlDataAdapter(strSQL, objConn)
    activecomp = New DataSet
    daT1.Fill(activecomp, "errordesc")

    strSQL = "SELECT * FROM complaint left join errordesc on complaint.tran_no=errordesc.tran_no group by complaint.tran_no"
    daT2 = New MySqlDataAdapter(strSQL, objConn)
    daT2.Fill(activecomp, "complaint")

    Dim rpt As New CrystalReport1
    rpt.SetDataSource(activecomp)
    CrystalReportViewer1.ReportSource = rpt

    objConn.Close()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多