JOINs y funciones de agregación en Protheus
SELECT ... LEFT JOIN ... ON ... GROUP BY ...Relaciona tablas y agrega resultados conservando contexto de filial.
Descripción general
JOIN define correspondencia de claves; GROUP BY agrupa y COUNT/SUM calculan valores por grupo. Relación 1:N puede multiplicar filas y distorsionar totales de cabecera. En LEFT JOIN, filtros de tabla opcional van en ON para conservar filas sin correspondencia. Ejemplo monta cadena SQL sin ejecutarla. Filial y eliminación lógica se filtran por tabla. Referencia comunitaria ilustra JOIN/agregación, pero no adoptamos recomendación genérica NOLOCK ni escrituras directas. (Fuentes: refs. 1–2.)
Sintaxis
SELECT ... LEFT JOIN ... ON ... GROUP BY ...Ejemplo comentado
#Include "Protheus.ch"
User Function Ed500()
Local cSql := "SELECT A.A1_COD,A.A1_LOJA,COUNT(P.C5_NUM) AS QTD "
// Filtrar cada tabla segun su comparticion.
cSql += "FROM "+RetSqlName("SA1")+" A "
cSql += "LEFT JOIN "+RetSqlName("SC5")+" P ON "
cSql += "P.C5_CLIENTE=A.A1_COD AND P.C5_LOJACLI=A.A1_LOJA "
cSql += "AND P.C5_FILIAL='"+xFilial("SC5")+"' "
cSql += "AND P.D_E_L_E_T_=' ' "
cSql += "WHERE A.A1_FILIAL='"+xFilial("SA1")+"' "
cSql += "AND A.D_E_L_E_T_=' ' "
cSql += "GROUP BY A.A1_COD,A.A1_LOJA"
ConOut(cSql)
Return NilMuestra SQL para contar pedidos por cliente/tienda, incluyendo grupos sin pedido; no abre cursor. En revisión: ejemplo editorial no compilado ni ejecutado en Protheus. Comprobar includes, release, RDD y contexto antes de probar.
- Antes de ejecutar, validar diccionario, permisos, cardinalidad, ChangeQuery, tipos y plan. Para valores externos, usar parámetros del framework y evitar concatenación.
- En revisión: ejemplo editorial no compilado ni ejecutado en Protheus. Comprobar includes, release, RDD y contexto antes de probar.

Comentarios
Todavía no hay comentarios aprobados.
Inicia sesión con Google o Microsoft para comentar.