Visual Basic.NET - Error en una consulta desde vb.net con sql server

 
Vista:
sin imagen de perfil
Val: 22
Ha aumentado 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Error en una consulta desde vb.net con sql server

Publicado por Gerardo (10 intervenciones) el 27/03/2020 19:16:08
Información adicional: La columna 'bases_retencion.nombre' de la lista de selección no es válida, porque no está contenida en una función de agregado ni en la cláusula GROUP BY..


1
script = "SELECT codigo, nombre, valor_base, porcentaje, tipo_retencion FROM bases_retencion GROUP BY codigo""

Solo quiero agrupar por el código.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Error en una consulta desde vb.net con sql server

Publicado por Phil Rob (1554 intervenciones) el 27/03/2020 19:53:45
Hola,

Todos los campos ponidos en el SELECT deben ser ponidos en el GROUP BY.

:)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 22
Ha aumentado 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Error en una consulta desde vb.net con sql server

Publicado por Gerardo (10 intervenciones) el 28/03/2020 00:47:08
1
2
3
SELECT codigo, nombre, valor_base, porcentaje, tipo_retencion
 FROM bases_retencion
 GROUP BY codigo

Esta consulta en mysql es correcta.

Pero en sql server me vota el error. y si pongo los campos del select en group by me quita el error. pero la consulta es equivocada.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de gilman
Val: 224
Ha disminuido 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Error en una consulta desde vb.net con sql server

Publicado por gilman (81 intervenciones) el 28/03/2020 08:54:15
Esa consulta no es correcta, los campos que no estén en la clausula GROUP BY solo pueden usarse dentro de funciones de agregado, desconozco MySQL, pero dudo mucho que se salte esa regla básica de SQL
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Error en una consulta desde vb.net con sql server

Publicado por Phil Rob (1554 intervenciones) el 28/03/2020 09:25:39
Hola,

No es correcta y si functiona con MySql, tienes una mala version ...

Todos los elementos escritos en SELECT, y que no están funciones (SUM, AVG, ...), deben ser escritos en GROUPY BY. Puedes agregar otros campos en GROUP BY pero no el contrario.

Ejemplo de GROUP BY :

La tabla TStock contiene :
1
2
3
4
5
IdArt	LibArt		Qte		PA
1		Article1	500		12
2		Article2	100		10
3		Article2	 25		10
4		Article3	 25		7

El GROUP BY :
1
2
3
SELECT LibArt, SUM(Qte*PA) AS Valeur
FROM TStock
GROUP BY LibArt;

El resultado :
1
2
3
4
LibArt		Valeur
Article1	6000
Article2	1250
Article3	175

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Error en una consulta desde vb.net con sql server

Publicado por Phil Rob (1554 intervenciones) el 28/03/2020 15:34:51
Hola,

Tu consulta en SQL Server es correcta, todos los campos del SELECT están en el GROUP BY.

Pero veo que los campos del SELECT están todos los campos de la tabla. En este caso, para que escribir un GROUP BY ?

No es un ORDER BY que es necesario ?

No creo que tu ejemplo MySQL mostrar el resultado de un GROUP BY (No error pero no GROUP BY) :

En la foto SQL Server, veo 3 registros 2 - CUOTA F.HORTIFRUTICOLA con los valores 1, 2, 3 / 0, 2, 0 / 1, 1, 1 .
Este es un GROUP BY con todos los campos de la tabla.

En la foto MySQL Server, veo 1 solo registro 2 - CUOTA F.HORTIFRUTICOLA con los valores 1 / 0 / 1
Este significa que MySQL has tenido el primer registro de 2 - CUOTA F.HORTIFRUTICOLA y que los valores de los dos otros estan olvidas. No es el objetivo de un GROUP BY.

Puedes dar un ejemplo de los resultados que quieres, solamente con los registros siguiente :
Los 3 registros 2 - CUOTA F.HORTIFRUTICOLA, con sus valores
Los 4 regsitros 1 - RETENCION ARREND BIEN MUEBLE 4%, con sus valores.

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Wilfredo Patricio Castillo
Val: 1.239
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Error en una consulta desde vb.net con sql server

Publicado por Wilfredo Patricio Castillo (720 intervenciones) el 28/03/2020 18:42:50
Para Phil Rob.

Muy buena observación.

Solo para ayudarte a mejorar tu español, ya que leí creo que eres francés.

El término correcto sería :Todos los campos puestos o colocados deben ser puestos o colocados en el GROUP BY.

Con cualesquiera de esos términos te entenderán muy bien el español.

Y con respecto a tu observación es correcta.

Si en algo te puedo ayudar a mejorar tu español, me puedes escribir, sobre todo en estos dias de cuarentena.

Saludos cordiales y gracias por tu ayuda a la gente de habla hispana.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Error en una consulta desde vb.net con sql server

Publicado por Phil Rob (1554 intervenciones) el 28/03/2020 19:20:37
@ Wilfredo,

Si, lo sé, pero no hago atención ... tengo que escribir Puesto y no Ponido !

Siempre, gusto estos comentarios sobre mi exactitud en español.

Muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 22
Ha aumentado 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Error en una consulta desde vb.net con sql server

Publicado por Gerardo (10 intervenciones) el 29/03/2020 17:35:32
No he podido encontrar la respuesta correcta. En el archivo adjunto envió el resultado de la consulta en mysql y es el resultado que espero. Si la llevo a sql server me sale el el error. y si la hago como ustedes me sugieren el resultado no es el esperado.

Tengo varios registros con el mismo código y nombre solo varia el tipo_retención, base, porcentaje y año. Si la tabla tiene 7 registros con código 01 y el mismo nombre se requiere que muestre un solo registro. Lo mismo si el código es 02 mismo nombre y hay 100 registros en la tabla solo quiero que muestre uno solo.

01 rertencion compras 5%
02 retencion servicios 4%
03 retencion ica 5*1000
etec.

Por esto es que lo agrupo por código en mysql y me funciona correctamente. Pero en sql server no me da el mismo resultado. O me indican por favor como hacer la consulta. Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Error en una consulta desde vb.net con sql server

Publicado por Phil Rob (1554 intervenciones) el 29/03/2020 22:59:47
Hola,

Comprendo que tomas el primer registro de cada que contiene el mismo nombre, sin te preocupar de los valores de otros campos.
En este caso, para que leer todos los campos.

La consulta podería ser :
1
2
SELECT DISTINCT nombre
 FROM bases_retencion
Esta consulta da solamente los nombres pero no es necesario de tomar los otros campos pues tomas un solo valor.

En otro caso, la consulta debe ser :
1
2
3
SELECT codigo, nombre, valor_base, porcentaje, tipo_retencion
 FROM bases_retencion
 GROUP BY codigo, nombre, valor_base, porcentaje, tipo_retencion

...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de gilman
Val: 224
Ha disminuido 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Error en una consulta desde vb.net con sql server

Publicado por gilman (81 intervenciones) el 30/03/2020 09:02:43
He echado un vistazo a tus consultas, y he llegado a la conclusión, de que MySQL, o tu versión de MySQL, está teniendo un conportamiento erroneo, la consulta de MySQL no debería funcionar, o eso o se pasan las reglas de SQL por donde les da.
En principio, ¿porque te devuelve el registro:
MySQL
y no cualquiera de estos?:
SQLServer
No hay un criterio lógico para devolver ese registro, si lo hay, indicamelo.

Repito, la consulta es erronea, GROUP BY es una cláusula estandar en SQL, y en todos los SGDBs debería funcionar igual:
Todos los campos que se pongan en la clausula FORM, excepto aquellos que se usen en funciones de agregado (SUM, TOTAL, etc.) deberán estar incluidos en la clausula GROUP BY.
Si tu SGDB, no se comporta así, abandonalo, buscate otro, o comprueba que se trata de un BUG, y que está resuelto en versiones posteriores del SGDB, e instalala una versión que tenga corregido el error, si no la hay, reporta el error al proveedor de la BD
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Error en una consulta desde vb.net con sql server

Publicado por Phil Rob (1554 intervenciones) el 30/03/2020 09:19:33
Hola,

Continuo mi mensaje de ayer ...

Si quieres valores en los campos Nombre, valor_base, porcentaje y tipo_retencion, también puedes utilizar el código siguiente :

1
2
3
SELECT nombre, MIN(codigo), SUM(valor_base), SUM(porcentaje), SUM(tipo_retencion)
 FROM bases_retencion
 GROUP BY nombre

Para las funciones, MIN y SUM, puedes elegir otras : MAX, AVG, ... .
Los resultados estarán según, pero no menos significados que estos de un registro al azar.

Que tenga un buen dia ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de gilman
Val: 224
Ha disminuido 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Error en una consulta desde vb.net con sql server

Publicado por gilman (81 intervenciones) el 30/03/2020 09:44:42
Como puedes ver en mi anterior comentario tiene un problema con la instalación de MySQL, no hace lo que debería, esto es un problema, y debería darse cuenta que el problema no está en la consulta de SQL Server, que evidentemente no funciona porque no es correcta.
Desconozco MySQL, pero debería comportarse como indican el estandar SQL, y no lo está haciendo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Error en una consulta desde vb.net con sql server

Publicado por Phil Rob (1554 intervenciones) el 30/03/2020 17:15:55
@Gilman

Hola,

Claro que MySql no es correcto pero, si comprendo bien el problema de Gerardo, quiere el mismo resultado con SqlServer que con su MySql. Estamos acuerdo que no es posible.

Que hacer ...

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar