2015-11-24 33 views
0

我有一個INNER JOIN數據庫調用來根據上次登錄值填充表。刪除Gridview中的重複項:INNER JOIN SQL

SQL是像這樣:

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

的問題是,當內,在表2加入的樣子,我也多次在基於查詢登錄的用戶。

所以,當我的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不是查詢中的一員。

有什麼建議嗎?

我曾經想過加入DISTINCT我的SQL,但我不知道該如何當我select *並在那裏companyName必須DISTINCT

回答

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 
0

爲什麼你在查詢不這樣做呢?事情是這樣的:

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

你選擇任何你從T2

+0

我還沒有見過'過,但據我瞭解跨Apply' ... SELECT TOP(1)將拉我的第一列在表2,即使我需要DISTINCT列將來自table1。這是我的問題,因爲我需要從表1中選擇全部。我是否正確地閱讀了您的代碼? – narue1992

+0

此外,最後一個登錄值由用戶選擇的文本框填充。這就是爲什麼你看到它 – narue1992

+0

你可以把你的表結構? –