Como no, pero es un poco lío.
Código:
cAux = "AND Mesa IN (SELECT Codigo FROM Mesas WHERE CodPrv = A.CodPrv";
switch (((PTreeMun)MunRes->GetNodeData(MunRes->FocusedNode))->Nivel)
{
case 2:
cAux = cAux + " AND Municipio IN (SELECT Codigo FROM Dl01 WHERE CodPrv = A.CodPrv AND CodPar = :Codigo)";
break;
case 4:
cAux = cAux + " AND Municipio = :Codigo";
break;
}
cAux = cAux + ")";
fMenu->Auxiliar->Close();
fMenu->Auxiliar->SQL->Text = "SELECT A.Sigla,";
fMenu->Auxiliar->SQL->Add("COALESCE(B.Votos, 0) Votos1, (SELECT SUM(Votos) FROM Resultados WHERE CodPrv = A.CodPrv AND Proceso = :Proceso1 " + cAux + ") Total1,"
fMenu->Auxiliar->SQL->Add("COALESCE(C.Votos, 0) Votos2, (SELECT SUM(Votos) FROM Resultados WHERE CodPrv = A.CodPrv AND Proceso = :Proceso2 " + cAux + ") Total2, CASE WHEN A.Codigo = -3 THEN 0 WHEN Codigo < 0 THEN A.Codigo ELSE 1 END Orden");
fMenu->Auxiliar->SQL->Add("FROM Partidos A LEFT JOIN (SELECT Partido, SUM(Votos) Votos FROM Resultados WHERE CodPrv = :PrvIns AND Proceso = :Proceso1 " + StringReplace(cAux, "A.CodPrv", ":PrvIns", oReplace) + " GROUP BY Partido) B ON B.Partido = A.Codigo");
fMenu->Auxiliar->SQL->Add("LEFT JOIN (SELECT Partido, SUM(Votos) Votos FROM Resultados WHERE CodPrv = :PrvIns AND Proceso = :Proceso2 " + StringReplace(cAux, "A.CodPrv", ":PrvIns", oReplace) + " GROUP BY Partido) C ON C.Partido = A.Codigo");
fMenu->Auxiliar->SQL->Add("WHERE A.CodPrv = :PrvIns AND (B.Votos > 0 OR C.Votos > 0) ORDER BY Orden DESC, Votos1 DESC, Votos2 DESC, Sigla");
lPrueba = false;
for (nItem = 0; nItem < SelRes->Items->Count; nItem ++)
if (SelRes->Items->Item[nItem]->Checked)
{
fMenu->Auxiliar->ParamByName("Proceso1")->AsInteger = StrToInt(SelRes->Items->Item[nItem]->SubItems->Strings[0]);
fMenu->Auxiliar->ParamByName((lPrueba ? (String)"Proceso2" : (String)"Proceso1"))->AsInteger = StrToInt(SelRes->Items->Item[nItem]->SubItems->Strings[0]);
lPrueba = !lPrueba;
}
if (((PTreeMun)MunRes->GetNodeData(MunRes->FocusedNode))->Nivel > 1)
fMenu->Auxiliar->ParamByName("Codigo")->AsInteger = ((PTreeMun)MunRes->GetNodeData(MunRes->FocusedNode))->Codigo;
fMenu->Auxiliar->ParamByName("PrvIns")->AsString = ((PTreeMun)MunRes->GetNodeData(MunRes->FocusedNode))->Provincia;
if (((PTreeMun)MunRes->GetNodeData(MunRes->FocusedNode))->Nivel < 4 && StrToIntDef(PadMun->Text, 0) > 0)
fMenu->Auxiliar->ParamByName("Padron")->AsInteger = StrToIntDef(PadMun->Text, 0);
fMenu->Auxiliar->Open();
- cAux es un AnsiString
- SelRes es un TListView
- Dl01 es una vista de la BB.DD.
En el código que puse al principio supongo que ((PTreeMun)MunRes->GetNodeData(MunRes->FocusedNode))->Nivel vale 1 y por eso no aparece parte del código que se puede montar.