Em muitos sistemas, eh bastante comum termos duas tabelas para separar cliente de fornecedor por exemplo. Vou usar este ambiente para detalhar a dica de hoje: como unir duas tabelas, mas fazer um group by entre elas.Para selecionar os cnpj dos cliente, utilizariamos "select cnpj from cliente"Para selecionar os cnpj dos fornecedores, utilizariamos "select cnpj from fornecedor"Para unir essas duas tabelas, poderiamos utilizar "select cnpj from cliente union all select cnpj from fornecedor"Simplesmente sapecar um group by no final nao vai funcionar. Para resolver este pequeno detalhe tecnico, eh muito simples: basta que a expressao fique assim:select cnpj from (select cnpj from cliente union all select cnpj from fornecedor) as CadCNPJCom isso, podemos nos divertir, colocando distinct, group by, count ou seja la o que for preciso, como nos exemplos abaixo:select distinct cnpj from (select cnpj from cliente union all select cnpj from fornecedor) as CadCNPJselect cnpj from (select cnpj from cliente union all select cnpj from fornecedor) as CadCNPJ group by cnpjselect count(*) from (select cnpj from cliente union all select cnpj from fornecedor) as CadCNPJ Dessa vez apenas uma dica que facilita bem a nossa vida.. Criei essa rotina para validar inscricao estadual em javascript. Passamos o campo e o estado e o resto deixa com ela. Tem funcionado, qualquer duvidas ou sugestoes, podem me comunicarfunction checkInscEstadual(theField,estado) { var inscEst=retiraCaracteresInvalidos(theField.value); if (inscEst!="") { var dig8 = "/BA*/RJ*"; var dig9 = "/AL*/AP*/AM*/CE*/ES*/GO*/MA*/MS*/PA*/PB*/PI*/RN*/RR*/SC*/SE*/TO*"; var dig10 ="/PR*/RS*"; var dig11 ="/MT*"; var dig12 ="/SP*"; var dig13 ="/AC*/MG*/DF*"; var dig14 ="/PE*/RO*"; if (dig8.indexOf("/"+estado+"*") != -1) { inscEst=inscEst.substr(0,8); tam=8; } else if (dig9.indexOf("/"+estado+"*") != -1) { inscEst=inscEst.substr(0,9); tam=9; } else if (dig10.indexOf("/"+estado+"*") != -1) { inscEst=inscEst.substr(0,10); tam=10; } else if (dig11.indexOf("/"+estado+"*") != -1) { inscEst=inscEst.substr(0,11); tam=11; } else if (dig12.indexOf("/"+estado+"*") != -1) { inscEst=inscEst.substr(0,12); tam=12; } else if (dig13.indexOf("/"+estado+"*") != -1) { inscEst=inscEst.substr(0,13); tam=13; } else if (dig14.indexOf("/"+estado+"*") != -1) { inscEst=inscEst.substr(0,14); tam=14; } else { inscEst=""; inscEstadual.disabled = true; tam=0; } } if (inscEst!="") { if (estado=="AC") { inscEst=strzero(inscEst,13); primDigito=0; seguDigito=0; pesos="43298765432"; soma=0; for(i=0;i<pesos.length;i++) { soma=soma+(parseInt(inscEst.substr(i,1))*parseInt(pesos.substr(i,1))); } primDigito=11-(soma%11); if (primDigito>9) primDigito=0; pesos="543298765432"; soma=0; for(i=0;i<pesos.length;i++) { soma=soma+(parseInt(inscEst.substr(i,1))*parseInt(pesos.substr(i,1))); } seguDigito=11-(soma%11); if (seguDigito>9) seguDigito=0; if ((parseInt(inscEst.substr(11,1))!=primDigito) || (parseInt(inscEst.substr(12,1))!=seguDigito)) { alert("Insc. Estadual invalida"); theField.select(); theField.focus(); } else theField.value=inscEst; } else if (estado=="AL") { inscEst=strzero(inscEst,9); primDigito=0; pesos="98765432"; soma=0; for(i=0;i<pesos.length;i++) { soma=soma+(parseInt(inscEst.substr(i,1))*parseInt(pesos.substr(i,1))); } soma=soma*10; primDigito=soma%11; if (primDigito>9) primDigito=0; if (parseInt(inscEst.substr(8,1))!=primDigito) { alert("Insc. Estadual invalida"); theField.select(); theField.focus(); } else theField.value=inscEst; } else if (estado=="AP") { inscEst=strzero(inscEst,9); if (inscEst.substr(0,2) != "03") { alert("Insc. Estadual invalida"); theField.select(); theField.focus(); } else { if (parseFloat(inscEst.substr(0,8))<3017000) { p=5; d=0; } else if (parseFloat(inscEst.substr(0,8))<3019022) { p=9; d=1; } else { p=0; d=0; } primDigito=0; pesos="98765432"; soma=p; for(i=0;i<pesos.length;i++) { soma=soma+(parseInt(inscEst.substr(i,1))*parseInt(pesos.substr(i,1))); } primDigito=11-(soma%11); if (primDigito==10) primDigito=0; else if (primDigito==11) primDigito=d; if (parseInt(inscEst.substr(8,1))!=primDigito) { alert("Insc. Estadual invalida"); theField.select(); theField.focus(); } else theField.value=inscEst; } } else if (estado=="AM") { inscEst=strzero(inscEst,9); primDigito=0; pesos="98765432"; soma=0; for(i=0;i<pesos.length;i++) { soma=soma+(parseInt(inscEst.substr(i,1))*parseInt(pesos.substr(i,1))); } if (soma<11) primDigito=11-soma; else { primDigito=soma%11; if (primDigito<2) primDigito=0; else primDigito=11-primDigito; } if (parseInt(inscEst.substr(8,1))!=primDigito) { alert("Insc. Estadual invalida"); theField.select(); theField.focus(); } else theField.value=inscEst; } else if (estado=="BA") { inscEst=strzero(inscEst,8); primDigito=0; seguDigito=0; if ((parseInt(inscEst.substr(0,1))<6) || (parseInt(inscEst.substr(0,1))==8)) modulo=10; else modulo=11; pesos="765432"; soma=0; for(i=0;i<pesos.length;i++) { soma=soma+(parseInt(inscEst.substr(i,1))*parseInt(pesos.substr(i,1))); } seguDigito=modulo-(soma%modulo);