Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom dia, possuo a seguinte consulta:
Onde NET_TERMINAIS.COD_NODE (Onde existem valores duplicados agrupados)
e
NODES_PESOS.COD_NODE ( Valores unicos que retornam valores de acordo com a coluna agrupada de cima) mas não esta funcionando, apenas fica pensando e não retorna nada, acredito que seja algum parametro faltando no JOIN, segue a Query:
SELECT NET_TERMINAIS.COD_NODE,
NODES_PESOS.PESO,
SUM(CASE WHEN NET_TERMINAIS.TM_STATUS = 'Online' AND NET_TERMINAIS.TM_TX < 40 OR NET_TERMINAIS.TM_TX > 50 THEN 1 END) /
SUM(CASE WHEN NET_TERMINAIS.TM_STATUS = 'Online' THEN 1 ELSE 0 END) as TX,
SUM(CASE WHEN NET_TERMINAIS.TM_STATUS = 'Online' AND NET_TERMINAIS.CMTS_SNR < 23 THEN 1 ELSE 0 END) /
SUM(CASE WHEN NET_TERMINAIS.TM_STATUS = 'Online' THEN 1 ELSE 0 END) AS SNR_UP,
SUM(CASE WHEN NET_TERMINAIS.TM_STATUS = 'Online' AND NET_TERMINAIS.TM_SNR < 35 THEN 1 ELSE 0 END) /
SUM(CASE WHEN NET_TERMINAIS.TM_STATUS = 'Online' THEN 1 ELSE 0 END) AS SNR_DOWN,
SUM(CASE WHEN NET_TERMINAIS.TM_STATUS = 'Online' AND NET_TERMINAIS.CMTS_FEC_UP_N_CORRIGIDO > 1.00 THEN 1 ELSE 0 END) /
SUM(CASE WHEN NET_TERMINAIS.TM_STATUS = 'Online' THEN 1 ELSE 0 END) AS FEC_N,
SUM(CASE WHEN NET_TERMINAIS.TM_STATUS = 'Online' AND NET_TERMINAIS.CMTS_FEC_UP_CORRIGIDO > 5.00 THEN 1 ELSE 0 END) /
SUM(CASE WHEN NET_TERMINAIS.TM_STATUS = 'Online' THEN 1 ELSE 0 END) AS FEC_C,
SUM(CASE WHEN NET_TERMINAIS.CI_SIGLA = 'CWB C' THEN 1 ELSE 0 END) AS TOTAIS,
NODES_PESOS.PESO
FROM NET_TERMINAIS
LEFT JOIN NODES_PESOS
ON NET_TERMINAIS.COD_NODE = NODES_PESOS.COD_NODE
GROUP BY NET_TERMINAIS.COD_NODE
ORDER BY TX DESC, NET_TERMINAIS.COD_NODE>
vc colocou 2 vezes o NODES_PESOS.PESOe nao selecionou o NODES_PESOS.COD_NODE
tente assim:
SELECT NET_TERMINAIS.COD_NODE,
NODES_PESOS.PESO,NODES_PESOS.COD_NODE,
SUM(CASE WHEN NET_TERMINAIS.TM_STATUS = 'Online' AND NET_TERMINAIS.TM_TX < 40 OR NET_TERMINAIS.TM_TX > 50 THEN 1 END) /
SUM(CASE WHEN NET_TERMINAIS.TM_STATUS = 'Online' THEN 1 ELSE 0 END) as TX,
SUM(CASE WHEN NET_TERMINAIS.TM_STATUS = 'Online' AND NET_TERMINAIS.CMTS_SNR < 23 THEN 1 ELSE 0 END) /
SUM(CASE WHEN NET_TERMINAIS.TM_STATUS = 'Online' THEN 1 ELSE 0 END) AS SNR_UP,
SUM(CASE WHEN NET_TERMINAIS.TM_STATUS = 'Online' AND NET_TERMINAIS.TM_SNR < 35 THEN 1 ELSE 0 END) /
SUM(CASE WHEN NET_TERMINAIS.TM_STATUS = 'Online' THEN 1 ELSE 0 END) AS SNR_DOWN,
SUM(CASE WHEN NET_TERMINAIS.TM_STATUS = 'Online' AND NET_TERMINAIS.CMTS_FEC_UP_N_CORRIGIDO > 1.00 THEN 1 ELSE 0 END) /
SUM(CASE WHEN NET_TERMINAIS.TM_STATUS = 'Online' THEN 1 ELSE 0 END) AS FEC_N,
SUM(CASE WHEN NET_TERMINAIS.TM_STATUS = 'Online' AND NET_TERMINAIS.CMTS_FEC_UP_CORRIGIDO > 5.00 THEN 1 ELSE 0 END) /
SUM(CASE WHEN NET_TERMINAIS.TM_STATUS = 'Online' THEN 1 ELSE 0 END) AS FEC_C,
SUM(CASE WHEN NET_TERMINAIS.CI_SIGLA = 'CWB C' THEN 1 ELSE 0 END) AS TOTAIS,
FROM NET_TERMINAIS
LEFT JOIN NODES_PESOS
ON NET_TERMINAIS.COD_NODE = NODES_PESOS.COD_NODE
GROUP BY NET_TERMINAIS.COD_NODE
ORDER BY TX DESC, NET_TERMINAIS.COD_NODE
Corrigi a consulta, os dados retornam, porem esta muuuuuiitoooo demorado, pelo que percebi, ele consulta a igualdade retorna o valor e agrupa, quando ele ja deveria consultar agrupado, axo que preciso agrupar tambem dentro do LEFT mas não sei como...de qualquer forma sua ajuda foi muito útil
sim ele sempre ira executar o SELECT, os JOINS e depois Os GROUPS E ORDERS!
vc colocou 2 vezes o NODES_PESOS.PESOe nao selecionou o NODES_PESOS.COD_NODE
tente assim:
SUM(CASE WHEN NET_TERMINAIS.TM_STATUS = 'Online' AND NET_TERMINAIS.TM_TX < 40 OR NET_TERMINAIS.TM_TX > 50 THEN 1 END) / SUM(CASE WHEN NET_TERMINAIS.TM_STATUS = 'Online' THEN 1 ELSE 0 END) as TX, SUM(CASE WHEN NET_TERMINAIS.TM_STATUS = 'Online' AND NET_TERMINAIS.CMTS_SNR < 23 THEN 1 ELSE 0 END) / SUM(CASE WHEN NET_TERMINAIS.TM_STATUS = 'Online' THEN 1 ELSE 0 END) AS SNR_UP, SUM(CASE WHEN NET_TERMINAIS.TM_STATUS = 'Online' AND NET_TERMINAIS.TM_SNR < 35 THEN 1 ELSE 0 END) / SUM(CASE WHEN NET_TERMINAIS.TM_STATUS = 'Online' THEN 1 ELSE 0 END) AS SNR_DOWN, SUM(CASE WHEN NET_TERMINAIS.TM_STATUS = 'Online' AND NET_TERMINAIS.CMTS_FEC_UP_N_CORRIGIDO > 1.00 THEN 1 ELSE 0 END) / SUM(CASE WHEN NET_TERMINAIS.TM_STATUS = 'Online' THEN 1 ELSE 0 END) AS FEC_N, SUM(CASE WHEN NET_TERMINAIS.TM_STATUS = 'Online' AND NET_TERMINAIS.CMTS_FEC_UP_CORRIGIDO > 5.00 THEN 1 ELSE 0 END) / SUM(CASE WHEN NET_TERMINAIS.TM_STATUS = 'Online' THEN 1 ELSE 0 END) AS FEC_C, SUM(CASE WHEN NET_TERMINAIS.CI_SIGLA = 'CWB C' THEN 1 ELSE 0 END) AS TOTAIS, FROM NET_TERMINAIS LEFT JOIN NODES_PESOS ON NET_TERMINAIS.COD_NODE = NODES_PESOS.COD_NODE GROUP BY NET_TERMINAIS.COD_NODE ORDER BY TX DESC, NET_TERMINAIS.COD_NODE