【问题标题】:Get distinct values from a datatable or String?从数据表或字符串中获取不同的值?
【发布时间】:2012-08-02 16:09:50
【问题描述】:

我在下面创建了 Datatable,它在 Page_Load 上提供 GridView

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    Dim strQuery As String = "SELECT DISTINCT setsTbl.setName, trainingTbl.t_date, userAssessmentTbl.o_id FROM userAssessmentTbl LEFT JOIN trainingTbl ON userAssessmentTbl.tt_id = trainingTbl.tt_id LEFT JOIN setsTbl ON trainingTbl.s_id = setsTbl.s_id LEFT JOIN outcomesTbl ON userAssessmentTbl.o_id = outcomesTbl.o_id WHERE UserId = @UserId ORDER BY setName, t_date DESC "

    Dim cmd As New SqlCommand(strQuery)
    cmd.Parameters.AddWithValue("@UserId", userString)
    Dim dt As DataTable = GetData(cmd)

   GridView1.DataSource = dt
   GridView1.DataBind()

End Sub

目前它输出值:

SetName t_date o_id
name1 12.12.12 1
name2 13.07.12 1
name2 15.07.12 2
name3 16.07.12 4
name3 17.07.12 3

我想让我的 DataTable 下面输出不同的行,如下所示:

SetName t_date o_id
name1 12.12.12 1
name2 13.07.12 1
name3 16.07.12 4

谁能告诉我这是怎么实现的?

【问题讨论】:

  • 澄清一下,您实际上是在为每个 SetName 寻找第一个不同的行吗?
  • 是的,这正是我所追求的

标签: sql gridview datatable


【解决方案1】:

您似乎想要每个名称的最早日期。如果是这样,您可以使用 Group By 和 min 函数:

setsTbl.setName, Min(trainingTbl.t_date), Min(outcomesTbl.o_id)
FROM userAssessmentTbl LEFT JOIN trainingTbl ON userAssessmentTbl.tt_id = trainingTbl.tt_id 
LEFT JOIN setsTbl ON trainingTbl.s_id = setsTbl.s_id LEFT JOIN outcomesTbl 
ON userAssessmentTbl.o_id = outcomesTbl.o_id 
WHERE UserId = @UserId Group By setsTbl.setName ORDER BY setsTbl.setName

【讨论】:

  • 如上所述,我所追求的是从上面的代码中获取不同的 setName 的最佳方法(如示例所示)。无论是通过sql select语句还是DataTable的过滤。
猜你喜欢
  • 1970-01-01
  • 2023-01-17
  • 2022-01-13
  • 2020-07-25
  • 2019-05-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-09
  • 1970-01-01
相关资源
最近更新 更多