Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-11-2023
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
Al usar una SELECT para calcular el dato, el motor pasa.

Encapsula todo en una SELECT y prueba.

Código SQL [-]
SELECT A.*
FROM
(
SELECT DISTINCT A.Codigo, A.Nombre, COALESCE(RDB$GET_CONTEXT('USER_TRANSACTION', 'MUNICIPIO'), 1) Municipio, C.Nombre NomMunicipio,
       (SELECT SUM(Votos) FROM Resultados WHERE CodPrv = A.CodPrv AND Partido = A.Codigo AND Proceso = B.Proceso 
           AND Mesa IN (SELECT Codigo FROM Mesas WHERE CodPrv = A.CodPrv AND Municipio = COALESCE(RDB$GET_CONTEXT('USER_TRANSACTION', 'MUNICIPIO'), 1))) VotPar,
       RDB$SET_CONTEXT('USER_TRANSACTION', 'MUNICIPIO', (SELECT FIRST 1 Municipio FROM Mesas WHERE CodPrv = B.CodPrv AND Codigo = B.Mesa ORDER BY Municipio))
FROM Partidos A
LEFT JOIN Resultados B ON A.CodPrv = B.CodPrv AND A.Codigo = B.Partido AND B.Proceso = :Proceso
LEFT JOIN Poblacion C ON A.CodPrv = C.CodPrv AND COALESCE(RDB$GET_CONTEXT('USER_TRANSACTION', 'MUNICIPIO'), 1) = C.Codigo
WHERE A.CodPrv = :PrvIns AND A.Codigo > 0 
  AND EXISTS (SELECT Municipio FROM Mesas WHERE CodPrv = B.CodPrv AND Codigo = B.Mesa)
) A
ORDER BY 4, 5 DESC, 2

Por otro lado, haces unas SELECT totalmente anárquicas, que me parece que penalizan totalmente el rendimiento.

Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #2  
Antiguo 07-11-2023
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Cita:
Empezado por fjcg02 Ver Mensaje
Al usar una SELECT para calcular el dato, el motor pasa.

Encapsula todo en una SELECT y prueba.
Da este error:
Código:
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Invalid command.
No column name specified for column number 6 in derived table A.
Cita:
Empezado por fjcg02 Ver Mensaje
Por otro lado, haces unas SELECT totalmente anárquicas, que me parece que penalizan totalmente el rendimiento.
No te quito la razón, y es lo que tiene haber aprendido a lo bestia directamente en "real".
Responder Con Cita
  #3  
Antiguo 07-11-2023
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
Hola,

supongo que ese error te da porque no pones nombre /alias a las columnas.

Código SQL [-]
SELECT DISTINCT 
A.Codigo, 
A.Nombre, 
COALESCE(RDB$GET_CONTEXT('USER_TRANSACTION', 'MUNICIPIO'), 1) Municipio, 
C.Nombre NomMunicipio,
(SELECT SUM(Votos) FROM Resultados WHERE CodPrv = A.CodPrv AND Partido = A.Codigo AND Proceso = B.Proceso 
       AND Mesa IN (SELECT Codigo FROM Mesas WHERE CodPrv = A.CodPrv AND Municipio = COALESCE(RDB$GET_CONTEXT('USER_TRANSACTION', 'MUNICIPIO'), 1))) VotPar,
/* a partir de aqui puedes tener el problema */
RDB$SET_CONTEXT('USER_TRANSACTION', 'MUNICIPIO', (SELECT FIRST 1 Municipio FROM Mesas WHERE CodPrv = B.CodPrv AND Codigo = B.Mesa ORDER BY Municipio)
) NOMBRECOLUMNA

FROM Partidos A

Te falta bautizar alguna columna para que lo entienda, concretamente la sexta columna. (Te respondo rápido sin analizar al 100% la consulta...)

Saludos

PD: ya he visto en otro hilo que empiezas a escribir consultas de forma más estructurada. De esa manera para el motor es más fácil.
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #4  
Antiguo 07-11-2023
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Cita:
Empezado por fjcg02 Ver Mensaje
Te falta bautizar alguna columna para que lo entienda, concretamente la sexta columna. (Te respondo rápido sin analizar al 100% la consulta...)

Saludos

PD: ya he visto en otro hilo que empiezas a escribir consultas de forma más estructurada. De esa manera para el motor es más fácil.
La sexta columna del query es la definición de una variable (RDB$SET_CONTEXT('USER_TRANSACTION', 'MUNICIPIO'...), que se usa para recuperar un valor (RDB$GET_CONTEXT('USER_TRANSACTION', 'MUNICIPIO')). Fuera de eso todas las columnas están identificadas. Al margen de esa circunstancia, esa columna no interviene para nada en el ORDER BY y por lo tanto debería dar lo mismo que estuviera bautizada o no; además esa columna siempre tiene valor 1.

Última edición por Angel.Matilla fecha: 07-11-2023 a las 18:43:30.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
No funciona ORDER BY desc LIMIT franroju PHP 2 28-03-2013 14:08:44
funciona bien en windows 7 64b pero en XP no funciona ASAPLTDA Varios 5 06-05-2011 16:24:50
order by no funciona con datetime... User_baja1 SQL 1 17-05-2005 12:37:17
ORDER BY en Rave con parametro NO funciona !. Luis Impresión 0 05-01-2005 18:01:19
Order by ...... chutipascal Firebird e Interbase 8 24-06-2003 14:46:21


La franja horaria es GMT +2. Ahora son las 21:35:22.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi