Fórum Consumo de cpu estourando com pesquisa SQL #49190
04/02/2005
0
Valeu galera
Sremulador
Curtir tópico
+ 0Posts
04/02/2005
Afarias
T+
Gostei + 0
04/02/2005
Sremulador
eu já tentei de tudo mas quando tenho que fazer certas pesquisas principalmente quando tem group´s ...
Gostei + 0
04/02/2005
Afarias
T+
Gostei + 0
05/02/2005
Sremulador
Gostei + 0
05/02/2005
Afarias
T+
Gostei + 0
05/02/2005
Sremulador
Gostei + 0
05/02/2005
Afarias
T+
Gostei + 0
09/02/2005
Sremulador
select .... campo1col from tabela
where...
group...
union all
select campo1col .... from tabela
where...
group...
pois o resultado que quero tem que ser em coluna, você teria uma boa solução para este caso ???
Gostei + 0
09/02/2005
Afarias
T+
Gostei + 0
11/02/2005
Sremulador
SELECT F1CD, F1CV, F1FF, F1RC, F1RP, F1CT, PRDS, CPPR, PCSB, SUM(CEVL * CEQT) as CEVL, SUM(CEVH * CEQT) AS CEVH, CAST (NULL AS DECIMAL (16,4)) AS CE, SUM (CEQT) AS CEQT, SUM ((CEFM + CEVH + CEVL) * (CEQT)) AS TOTAL FROM CONTA_AMB_PROCED
INNER JOIN CONTA_AMB_PROCED_MESTRE CAM ON(CPCD=CECP)
INNER JOIN ESPECIFICA_PROCEDCONV_DETALHE on (EPPC=CEPC)
INNER JOIN PROCEDIMENTO ON (PCCD=CEPC)
INNER JOIN PRESTADOR ON (PRCD=CPPR)
INNER JOIN FATURA_DETALHE_AMB ON (F2AM=CPAM)
INNER JOIN FATURA_MESTRE_AMB ON (F1CD=F2F1)
INNER JOIN AMBULATORIO ON (AMCD=CPAM)
WHERE CEAM=CAM.CPAM AND AMTH = ´C´ AND EPPV=CETB AND CETA IN(10,12)
GROUP BY F1CD, F1CV, F1FF, F1RC, F1RP, F1CT, PRDS, CPPR, PCSB
UNION ALL
SELECT F1CD, F1CV, F1FF, F1RC, F1RP, F1CT, PRDS, CPPR, PCSB, SUM(CEVL * CEQT) as CEVL, CAST (NULL AS DECIMAL (16,4)) AS CE, SUM(CEVH * CEQT) AS CEVH, SUM (CEQT) AS CEQT, SUM ((CEFM + CEVH + CEVL) * (CEQT)) AS TOTAL FROM CONTA_AMB_PROCED
INNER JOIN CONTA_AMB_PROCED_MESTRE CAM ON(CPCD=CECP)
INNER JOIN ESPECIFICA_PROCEDCONV_DETALHE on (EPPC=CEPC)
INNER JOIN PROCEDIMENTO ON (PCCD=CEPC)
INNER JOIN PRESTADOR ON (PRCD=CPPR)
INNER JOIN FATURA_DETALHE_AMB ON (F2AM=CPAM)
INNER JOIN FATURA_MESTRE_AMB ON (F1CD=F2F1)
INNER JOIN AMBULATORIO ON (AMCD=CPAM)
WHERE CEAM=CAM.CPAM AND AMTH = ´E´ AND EPPV=CETB AND CETA IN(10,12)
GROUP BY F1CD, F1CV, F1FF, F1RC, F1RP, F1CT, PRDS, CPPR, PCSB
da pra entender, na union o cod e o mesmo apenas a restrição muda para que o valor que desejo saia na outra coluna, você acha que tem como fazer isso
Gostei + 0
11/02/2005
Afarias
no primeiro: AMTH = ´C´ e no outro AMTH = ´E´ -- vc poderia evitar o union usando AMHT IN (´C´, ´E´)
sua query realmente está bem pessada, tem *muitos* grupos e ainda corre 2 vezes por causa do UNION
além dos muitos JOINS (todos eles estão usando os índeces né? se for, ok)
talvês o ´pior´ da história é q o WHERE não parece conter nada q possa efetivamente otimizar a query:
|WHERE CEAM=CAM.CPAM
me parece mais um join
|AND AMTH = ´C´
campo de baixa seletividade
|AND EPPV=CETB
??
|AND CETA IN(10,12)
novamente, baixa seletividade
por esse WHERE vc deve estar fazendo algo como alguma seleção NATURAL -- quanto maior for a quntidade de registros desta tabela onde a seleção é NATURAL, mas lento é a consulta toda...
T+
Gostei + 0
11/02/2005
Sremulador
não exatamente no select do 1º union eu separo uma coluna
CAST (NULL AS DECIMAL (16,4)) AS CE
ja na mesma posição no 2º union eu ja coloco
SUM(CEVL * CEQT) as CEVL
sim mas e que na primeira union eu quero que o valor de E aparareça em uma coluna e a de C em outra...
Gostei + 0
11/02/2005
Afarias
OK
T+
Gostei + 0
11/02/2005
Sremulador
Gostei + 0
11/02/2005
Afarias
T+
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)