NÃO REPITIR LINHA AO POPULAR LISTVIEW COM DATAREAD
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:
Fico no aguardo, e desde já agradeço.
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.
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
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
Boa tarde TUNUSAT
Montei o código da seguinte maneira:
E continua trazendo todos os campos da tabela.
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.
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[Ô]
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
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
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[Ô]
Oi JABA
Tentei do jeito que você sugeriu e dá o seguinte erro:
Tentei do jeito que você sugeriu e dá o seguinte erro:
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[Ô]
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.
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.
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
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, 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[Ô]
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.
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.
Tópico encerrado , respostas não são mais permitidas