Clausula Having VFP

Tengo problemas para mostrar cierta información:
Usa la clausula HAVING para encontrar registros duplicados con este script:
SELECT Prov_nombr,clave_art,imgfecdoc, COUNT(*) as repetido FROM descuentos GROUP BY Prov_nombr,clave_art,imgfecdoc HAVING repetido > 1
Después de eso quiero mostrar toda la información de los registros que están duplicados y agruparlos por duplicación, pero no se como. He intentado algunas opciones por ejemplo:
SELECT * FROM descuentos WHERE prov_nombr AND imgfecdoc in (SELECT Prov_nombr,clave_art,imgfecdoc, COUNT(*) as repe FROM descuentos GROUP BY Prov_nombr,clave_art,imgfecdoc HAVING repe > 1)
ó
SELECT * FROM descuentos WHERE prov_nombr IN (SELECT Prov_nombr,imgfecdoc FROM descuentos GROUP BY Prov_nombr,imgfecdoc HAVING COUNT(*) > 1) AND imgfecdoc IN (SELECT Prov_nombr,imgfecdoc FROM descuentos GROUP BY Prov_nombr,imgfecdoc HAVING COUNT(*) > 1)

1 respuesta

Respuesta
1
Estás utilizando muy mal la cláusula having pues esta debe estar basada en una expresión índice (primaria o foránea) y no en varios campos y para lo que requieres algo como lo siguiente soluciona tu problema basándose en que clave_art es una expresión índice:
If Set("EngineBehavior") > 70
  Set Enginebehavior 70
Endif
SELECT Prov_nombr,clave_art,imgfecdoc, COUNT(clave_art) as repetido FROM descuentos GROUP BY clave_art Having repetido > 1
Gracias Experto!
Por favor explicame esto: "debe estar basada en una expresión indice (primaria o foránea)"
Y para que sirve :
If Set("EngineBehavior") > 70
  Set Enginebehavior 70
Endif
Saludos
En cuanto a lo primero quiero decir que la tabla debe tener un campo clave primario o secundario lo que comúnmente se le llama en bases de datos llaves primarias o llaves foráneas (para mayor información consulta sobre bases de datos).
Y en cuanto a lo otro, Set Enginebehavior cambia el comportamiento de las sentencias Select SQL de Visual FoxPro según de la versión que que necesites así:
70: Especifica que las sentencias SQL de Visual FoxPro se comportan como en versiones anteriores a Visual FoxPro 8.0.
80: Especifica que las sentencias SQL de Visual FoxPro se comportan como en Visual FoxPro 8.0.
90: Especifica que las sentencias SQL de Visual FoxPro se comportan como en Visual FoxPro 9.0. Esta es la configuración por defecto.
Obviamente este comando está disponible en Visual FoxPro 8.0 y 9.0 y para solucionar el inconveniente que tenías se necesitaba que el comando Set Enginebehavior esté establecido a 70 porque de otro modo la solución propuesta no funciona.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas