删除Gridview中的重复项:INNER JOIN SQL

时间:2015-11-24 18:38:39

标签: sql gridview oracle10g distinct

我有一个INNER JOIN数据库调用,根据上次登录值填充表。

SQL就像这样:

SELECT * 
FROM table1 
INNER JOIN table2 ON table1.id = table2.id 
WHERE table2.lastlog >= '20151124%' 
ORDER BY table1.companyName

问题是,当内部联接查看table2时,我有多次基于查询登录用户。

因此,当我的gridview被填充时,它会显示所有这些。我只想向用户展示一次是否满足要求。

因此,我尝试使用引用http://www.vbforums.com/showthread.php?684370-Datagridview-Remove-Duplicates

像这样:

 For Loop1 As Integer = 0 To DisplaySup.Rows.Count - 2
    For Loop2 As Integer = Loop1 + 1 To DisplaySup.Rows.Count - 2
        If DisplaySup.Rows(Loop1).Cells(2).Text = DisplaySup.Rows(Loop2).Cells(2).Text Then
            DisplaySup.Rows.RemoveAt(Loop2)
        End If
    Next
 Next

但是,行RemoveAt会出错:Error 325 'RemoveAt' is not a member of 'System.Web.UI.WebControls.GridViewRowCollection'.

我也尝试过这样引用Remove duplication row in gridview

DisplaySup.DataSource = Query.GroupBy(x >= x.companyName).[Select](g >= g.First()).ToList()

OR

DisplaySup.DataSource = Query.DistinctBy(Function(i) i.companyName)

但是我没有看到xg被声明的位置加上我得到一个标记错误,DistinctByGroupBy不是Query的成员。< / p>

有什么建议吗?

我考虑过将DISTINCT添加到我的sql中,但我不确定当select *companyName内的DISTINCT必须是[[x0,y0,x1,y1]*N]

2 个答案:

答案 0 :(得分:0)

为什么不在查询中执行此操作?像这样:

SELECT * from table1 
CROSS APPLY (SELECT TOP(1) * FROM table2
WHERE table1.id = table2.id
ORDER BY lastlog DESC
) AS T2

你从T2中选择你想要的任何东西

答案 1 :(得分:0)

要删除重复项,我的快速解决方法就是隐藏它们。

可能不是最好的选择,因为SQL DISTINCT使用会更精通;但是,我的SQL查询如何使其难以实现。

因此我做了以下事情:

Dim oldvalue As String
oldvalue = String.Empty
   If DisplaySup.Rows.Count > 0 Then
            oldvalue = DisplaySup.Rows(0).Cells(2).Text

            For i = 1 To DisplaySup.Rows.Count - 1

                Dim currentV As String = DisplaySup.Rows(i).Cells(2).Text

                If (oldvalue = currentV) Then
                    DisplaySup.Rows(i).Visible = False
                Else
                    oldvalue = DisplaySup.Rows(i).Cells(2).Text
                End If
           Next

  End If