NÃO REPITIR LINHA AO POPULAR LISTVIEW COM DATAREAD

SANROMAN 15/09/2015 15:40:54
#451420
Boa tarde,

Tenho um listview que populo através de uma consulta sql. Na coluna da tabela existem várias linhas com os mesmos dados.
Com o código que estou usando aparecem todas linhas existentes na tabela.
Como faço para que, no listview apareça apenas uma linha com os dados consultados, já que não é preciso que apareçam todos os registros existentes na tabela.
Segue código:



Private Sub preencherListComandasAbertas()

Dim sqlCon As New SqlConnection(strCmd)
Dim strSql As String = [Ô]SELECT NumDoc, NumVenda, Status, HoraEnt, HoraSaida, TotalVenda, [Ô] & _
[Ô]FROM TB_Venda [Ô] & _
[Ô]WHERE Status = [ô]COMANDA ABERTA[ô] [Ô] & _
[Ô]AND NumVenda LIKE [ô]%COM%[ô] [Ô] & _
[Ô]GROUP BY NumDoc, NumVenda, Status, HoraEnt, HoraSaida, TotalVenda [Ô] & _
[Ô]ORDER BY NumDoc ASC, NumVenda ASC[Ô]

Dim sqlCmd As New SqlCommand(strSql, sqlCon)
Dim dr As SqlDataReader
listTodasComandas.Items.Clear()

sqlCmd.Connection.Open()
dr = sqlCmd.ExecuteReader

While dr.Read
Dim lvItem As New ListViewItem(New String() {dr.GetValue(0).ToString, dr.GetString(1).ToString, dr.GetString(2).ToString, dr.GetTimeSpan(3).ToString, dr.GetTimeSpan(4).ToString, dr.GetDecimal(5).ToString([Ô]N[Ô], nfi)})
Me.listTodasComandas.Items.Add(lvItem)
End While

sqlCon.Close()
dr.Close()

End Sub


Fico no aguardo, e desde já agradeço.
TUNUSAT 15/09/2015 15:48:10
#451421
SANROMAN,

O mais indicado é que você altere sua QUERY para retornar somente os dados que você quer trabalhar, por exemplo, experimente colocar depois do [Ô]SELECT[Ô] o TERMO [Ô]DISTINCT[Ô].

[][ô]s,
Tunusat
SANROMAN 15/09/2015 17:36:48
#451423
Boa tarde TUNUSAT

Montei o código da seguinte maneira:


Dim strSql As String = [Ô]SELECT [txt-color=#e80000]DISTINCT[/txt-color] NumDoc, NumVenda, Status, HoraEnt, HoraSaida, TotalVenda [Ô] & _
[Ô]FROM TB_Venda [Ô] & _
[Ô]WHERE Status = [ô]COMANDA ABERTA[ô] [Ô] & _
[Ô]AND NumVenda LIKE [ô]%COM%[ô] [Ô] & _
[Ô]GROUP BY NumDoc, NumVenda, Status, HoraEnt, HoraSaida, TotalVenda [Ô] & _
[Ô]ORDER BY NumDoc ASC[Ô]


E continua trazendo todos os campos da tabela.
JABA 15/09/2015 18:26:12
#451424
Resposta escolhida
Se sua intenção é forçar para retornar um único registro, então você poderia fazer assim:

Dim strSql As String = [Ô]SELECT [txt-color=#e80000]TOP 1[/txt-color] NumDoc, NumVenda, Status, HoraEnt, HoraSaida, TotalVenda [Ô] & _
[Ô]FROM TB_Venda [Ô] & _
[Ô]WHERE Status = [ô]COMANDA ABERTA[ô] [Ô] & _
[Ô]AND NumVenda LIKE [ô]%COM%[ô] [Ô] & _
[Ô]GROUP BY NumDoc, NumVenda, Status, HoraEnt, HoraSaida, TotalVenda [Ô] & _
[Ô]ORDER BY NumDoc ASC[Ô]

SANROMAN 15/09/2015 19:35:58
#451427
Boa Noite JABA

Usando TOP so terei o retorno de uma única linha.

Quero o retorno de apenas uma linha de cada campo NUMDOC. Essa coluna, na tabela TB_Vendas, comporta várias linhas com o mesmo número. Por exemplo

NumDoc
1
1
2
3
1

Quero o retorno de apenhas um campo NumDoc com valor 1 (qualquer um) e também o retorno do campo NumDoc com valor 2 e assim consecutivamente.

Até mais
JABA 15/09/2015 19:47:31
#451428
Agrupe somente pelo campo [Ô]NumDoc[Ô] então.

Dim strSql As String = [Ô]SELECT NumDoc, NumVenda, Status, HoraEnt, HoraSaida, TotalVenda [Ô] & _
[Ô]FROM TB_Venda [Ô] & _
[Ô]WHERE Status = [ô]COMANDA ABERTA[ô] [Ô] & _
[Ô]AND NumVenda LIKE [ô]%COM%[ô] [Ô] & _
[Ô]GROUP BY NumDoc[Ô] & [Ô]ORDER BY NumDoc ASC[Ô]
SANROMAN 15/09/2015 20:02:57
#451430
Oi JABA

Tentei do jeito que você sugeriu e dá o seguinte erro:


JABA 15/09/2015 20:23:00
#451432
O Group By é usado somente para consultas agregadas, então vai gerar erro mesmo. Tente assim:

Dim strSql As String = [Ô]SELECT DISTINCT NumDoc, NumVenda, Status, HoraEnt, HoraSaida, TotalVenda [Ô] & _
[Ô]FROM TB_Venda [Ô] & _
[Ô]WHERE Status = [ô]COMANDA ABERTA[ô] [Ô] & _
[Ô]AND NumVenda LIKE [ô]%COM%[ô] [Ô] & [Ô]ORDER BY NumDoc ASC[Ô]
SANROMAN 15/09/2015 20:52:34
#451434
Oi JABA

Já tinha tentando com DISTINCT e não tinha funcionado. Agora que você me propos usá-lo notei que todos os campos tem que ser iguais, ai funciona.
Retorna apenas uma das várias linhas da tabela com o NumDoc igual. Para funcionar com DISTINCT tive que retirar o campo VALOR do listview.
Será que existe alguma maneira de fazer o mesmo mantendo o campo valor, e melhor ainda, somando todos os valores do coluna VALOR na tabela.

Tomara que possa me ajudar.
JABA 15/09/2015 21:32:31
#451435
Cara, tá muito confuso essa sua tabela. Muito provavelmente ela está desnormalizada. Se puder, envia uma foto dela com os dados, só pra ter uma ideia de como está. Faça assim pra ver se sai os repetidos

Dim strSql As String = [Ô]SELECT NumDoc, NumVenda, Status, HoraEnt, HoraSaida, [txt-color=#e80000]Sum(TotalVenda)[/txt-color] [Ô] & _
[Ô]FROM TB_Venda [Ô] & _
[Ô]WHERE Status = [ô]COMANDA ABERTA[ô] [Ô] & _
[Ô]AND NumVenda LIKE [ô]%COM%[ô] [Ô] & _
[Ô][txt-color=#e80000]GROUP BY NumDoc, NumVenda[/txt-color][Ô] & [Ô]ORDER BY NumDoc ASC[Ô]


Se não for conforme acima, tente assim:

Dim strSql As String = [Ô]SELECT NumDoc, NumVenda, Status, HoraEnt, HoraSaida, [txt-color=#e80000]Sum(TotalVenda)[/txt-color] [Ô] & _
[Ô]FROM TB_Venda [Ô] & _
[Ô]WHERE Status = [ô]COMANDA ABERTA[ô] [Ô] & _
[Ô]AND NumVenda LIKE [ô]%COM%[ô] [Ô] & _
[Ô][txt-color=#e80000]GROUP BY NumDoc[/txt-color][Ô] & [Ô]ORDER BY NumDoc ASC[Ô]

SANROMAN 15/09/2015 22:13:33
#451436
Oi JABA

Os duplicados saíram usando DISTINCT, mas com DISTINCT não posso usar a coluna TotalVenda, pois a mesma tem valores distintos e para cada valor retorna uma linha no listview.

Se uso GROUP BY como nos exemplos que me mandou acima, dá o erro conforme a figura acima. Se coloco todos os campos em GROUP BY como a seguir:
[Ô]GROUP BY NumDoc, NumVenda, Status, HoraEnt, HoraSaida, TotalVenda [Ô] & _
Retorna todas linhas da tabela que estão em duplicidade no campo NumDoc, quando na verdade deveria retornar apenas uma linha com os valores somados.
Estou mandando foto da tabela.




Página 1 de 2 [12 registro(s)]
Tópico encerrado , respostas não são mais permitidas