我有一个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)
但是我没有看到x
和g
被声明的位置加上我得到一个标记错误,DistinctBy
和GroupBy
不是Query的成员。< / p>
有什么建议吗?
我考虑过将DISTINCT
添加到我的sql中,但我不确定当select *
和companyName
内的DISTINCT
必须是[[x0,y0,x1,y1]*N]
答案 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