Ir para conteúdo

POWERED BY:

FabianoSouza

Members
  • Total de itens

    921
  • Registro em

  • Última visita

Tudo que FabianoSouza postou

  1. FabianoSouza

    Reutilizar contagem em SELECT

    Olá. Se eu fizer um JOIN vai acabar exibindo turmas repetidas.
  2. FabianoSouza

    Reutilizar contagem em SELECT

    Eu preciso exibir duas informações em minha consulta: 1) A quantidade de pessoas inscritas numa turma de treinamento (isso é feito com um simples COUNT) 2) Uma flag de excesso de inscrições na turma. Seria obtido pela comparação entre a quantidade máxima permitida (já existe esse campo) e o COUNT feito acima. Até aqui sem problemas. O que quero é evitar fazer duas contagens (1 para saber a quantidade de inscritos, e outra para gerar a flag de excesso de inscrições). Há uma forma de utilizar UMA contagem para atender as duas necessidades? Meu código está assim: ... --AQUI FAZ A COMPARAÇÃO PARA GERAR A FLAG DE EXCESSO DE INSCRIÇÕES , CASE WHEN (SELECT COUNT(*) FROM dbo.tab AS ITT WHERE ITT.codTurmaDeTreina = T.id) > T.lotacaoMax Then T.nome + '&nbsp;'+'<span class=%22icon-aviso fcolor-critico%22 style=%22font-size:18px%22 title=Excesso&nbsp;de&nbsp;inscrições></span>' --AQUI FAZ A CONTAGEM DE INSCRIÇÕES , (SELECT COUNT(*) FROM dbo.tab AS ITT WHERE ITT.codTurmaDeTreina = T.id) AS 'Inscrições'
  3. FabianoSouza

    SELECT de registros sem associação, com subquery

    Eu possuo a tab TURMA e a EVENTOS (que são as aulas do curso). Estão relacionadas (chave primária da TURMA com chave estrangeira de EVENTOS). Em minha consulta, eu listo as turmas. Até aqui, sem problema. Problema a ser resolvido: Quando uma determinada TURMA não tiver EVENTO associado a ela, a TURMA não aparece no select. Preciso que dados da TURMA sejam exibidos mesmo se não houver evento associado a ela (significa que ainda não há as datas definidas para a realização do curso para aquela turma). Atualmente o código está assim: SELECT TT.id, TT.nome, CTA.nomeFantasia, tmp.previsto AS Previstos, tmp.realizado AS Realizados FROM dbo.tabDeTURMA TT INNER JOIN --esse JOIN é para trazer detalhes da empresa da qual essa turma pertence... dbo.tabDeCliente AS CTA ON TT.codCliente = CTA.contaCod , (SELECT COUNT(*) previsto -- aqui faz o cálculo de percentual que preciso e formata o valor. , SUBSTRING( FORMAT( CAST((SUM(CASE WHEN EVT.dataFinal <= GETDATE() THEN 1 ELSE 0 END) / CAST(COUNT(*) AS NUMERIC (10,3)) *100) AS NUMERIC(10,3)), 'N', 'pt-BR'),1,4) AS 'realizado' , EVT.codTurma FROM dbo.tabDeEventos EVT GROUP BY EVT.codTurma) tmp --aparentemente o problema está no WHERE. Mas se eu remover, gera duplicidades WHERE TT.id = tmp.codTurma
  4. FabianoSouza

    Reutilizar contagem em SELECT

    Olá @Motta Eu queria evitar a repetição do COUNT apenas para ter melhor desempenho e reutilizar a informação.
  5. FabianoSouza

    Invocar function em arquivo separado

    Tenho os arquivos de Javascript (.js) A e B. O arquivo A é aonde guardo as functions de uso amplo. O arquivo B é aonde guardo as functions específicas para uma área (páginas) do sistema. Eu tenho uma função genérica chamada criaGrid que monta um gridview (serve a todos os registros do sistema). Mas preciso que ela consiga invocar uma function existente no arquivo B. Vejam. //a var execFn5 é definida com o NOME de uma function //isso funciona se a function a ser executada estiver no arquivo A. //se eu coloca-la em outra arquivo, não funciona. //isso é um trecho da function principal que cria o GRID, que fica no Arquivo A. var execFn5 = window[alvoClick.getAttribute('data-fn')]; if (typeof execFn5 === 'function') { alert('Teste') }; Acho que é um questão de escopo do objeto Window. Eu precisaria fazer o objeto Window executar a function que está em outro arquivo (mas que está devidamente linkado à pagina renderizada pelo browser)
  6. FabianoSouza

    Invocar function em arquivo separado

    Ops. Encontrei o problema. Podem desconsiderar esse post, por gentileza. Eu não estava linkando o arquivo B corretamente.
  7. FabianoSouza

    Somar horas

    Possuo a tab TURMAS e EVENTOS. Preciso que o meu select existente, que seleciona registros da tab TURMAS (que faz JOIN com a tab EVENTOS), faça soma de horas dos EVENTOS associados ao item da tab TURMAS. SELECT, Campo1, Campo2, Campo... EVT.dataInicial, EVT.dataFinal FROM tabTURMAS LEFT JOIN tabEventosTreina AS EVT ... Creio que a lógica seria essa: -pegar a diferença entre os campos EVT.dataInicial, EVT.dataFinal -totalizar essas diferenças para todos os eventos que estiverem associados pelo relacionamento de chaves PK e FK que existem. -entregar o resultado dessa operação para cada item da consulta. Com esse código abaixo (de testes), consigo retornar a diferença de horas entre as duas datas. Mas não consigo evoluir. Acredito que precisaria isolar os minutos, somá-los para ver quantas horas totalizam, somar as horas, e por fim, juntar com a soma dos minutos. DECLARE @datainicial datetime, @dataFinal datetime DECLARE @qtde_Dif_Horas VARCHAR(10) SET @datainicial = '2023/16/11 19:00:00' SET @dataFinal = '2023/16/11 22:30:00' (select @qtde_Dif_Horas = CONVERT(varchar(10), @dataFinal - @datainicial, 108)) SELECT @qtde_Dif_Horas AS 'contHoras'
  8. FabianoSouza

    Agrupar e classificar select por data

    Possuo uma coluna de data. Eu gostaria que os registros com datas futuras aparecessem no topo do meu select, em relação aos demais registros. Em seguida, gostaria que somente esses registros com datas futuras ficassem em ordem crescente. Algo como João | 16/11/2023 Maria | 17/11/2023 José | 20/11/2023 ----------------------------- (demais registros da base) Antônio | 20/05/2023 Rosa | 15/08/2023 Cida | 15/10/2022 Pedro | 20/05/2021 Paulo | 14/11/2020 O select seria esse. select dbo.formataData(ET.dataInicial) AS 'data' FROM dbo.tab AS ET GROUP BY ET.dataInicial
  9. FabianoSouza

    Agrupar e classificar select por data

    Show de bola! Ajustei e ficou perfeito como eu precisava @Motta Muito obirgado!! SELECT ET.nomeEvento AS nome , ET.dataInicial FROM dbo.tab AS ET ORDER BY CASE WHEN ET.dataInicial > GETDATE() Then CONVERT(varchar,ET.dataInicial , 112) ELSE ET.nomeEvento END
  10. FabianoSouza

    Passar argumentos para function em SQL dinâmico

    Tenho uma function que precisa receber 02 argumentos. Ela funciona se eu aplicar num select qualquer. Mas se eu aplicar num select dinâmico, ocorre erro. Veja trecho do meu select. ... SET @sql = @sql +', dbo.retornaIco_ItemBloq((SELECT COUNT(*) FROM dbo.tab AS TT2 WHERE TT2.codCategTreina = CTT.id),'+@title+') AS ''resp''' ... No caso, o primeiro argumento da function dbo.retornaIco_ItemBloq é um SELECT COUNT. O segundo argumento é uma variável (que está devidamente declarada e definida). O erro ocorre porque ao executar (chamando EXEC(@sql) ), o SQL entende que o segundo argumento é uma coluna da consulta principal, pois existe uma vírgula antes da variável @title (que é o segundo argumento da function). Repito. Se eu aplicar essa function num select normal, funciona normalmente. Porém, preciso que funcione num SQL dinâmico porque é esse é o padrão que estou adotando para o sistema todo. A function dbo.retornaIco_ItemBloq faz o seguinte: 1) Recebe o valor do COUNT e da variável @title 2) Se o COUNT for maior que Zero, cria uma tag HTML (uma SPAN), define sua title com o valor da variável @title e passa para uma variável 3) Retorna o HTML que será exibido no resultado da consulta principal É super simples. Há outra forma de chamar a function?
  11. FabianoSouza

    Passar argumentos para function em SQL dinâmico

    @Motta A mensagem de erro é essa: Mensagem 207, Nível 16, Estado 1, Linha 3 Nome de coluna 'Categoriaindisponívelparaexclusão' inválido. O valor entre apóstrofos seria o valor contido na variável @title, que é o segundo argumento da function. Ou seja, a execução entende que o segundo argumento é uma das colunas do select principal, e como não existe na tabela alvo da consulta, ocorre o erro.
  12. FabianoSouza

    Fazer count em select FROM OPENJSON

    Sim. Esse seria o erro?
  13. FabianoSouza

    Fazer count em select FROM OPENJSON

    Preciso fazer um count na quantidade de objetos (ou chaves) JSON. Isso deveria funcionar exibindo a quantidade 2. Podem ajudar? DACLARE @strFiltros VARCHAR(1000) SET @strFiltros = '{"objFiltro":[[{"contexto":"candidatos","codFiltro":"0","codCidade":"490","codEstado":"14"},{"contexto":"candidatos","codFiltro":"0","codCidade":"155","codEstado":"14"}]]}' (SELECT COUNT(*) FROM OPENJSON(@strFiltros, '$.objFiltro[0]') WHERE [key] = 'candidatos')
  14. FabianoSouza

    Como manipular valores nesse caso?

    Meu código funciona. O que preciso é fazer uma function, que é invocada pelo método Window, ser executada utilizando argumentos da function "pai". Vejam trecho do meu código. O argumento objDados é um JSON. Nesse JSON há o nome de uma function (na chave objDados.fnTrataResp) que é instanciada no trecho execFn(event). O que preciso é que ao ser instanciada consiga manipular valores do objeto server. É possível? Ao que parece, teria que fazer um lance de injetar o objeto server na function....ou algo nessa linha de raciocínio. server.ajax(objDados, function(){ var execFn = window[objDados.fnTrataResp]; if (typeof execFn === 'function') { execFn(event) }; })
  15. FabianoSouza

    Permitir apenas Inteiro em text box

    Preciso que um campo aceite somente número, e inteiro ao digitar. Eu tenho uma function que funciona. Porém, agora preciso criar o input dinamicamente (via Javascript, createElement e etc..). Aí a function parou de funcionar. Vejam a function: function checkNumPg(evt) { var charCode = (evt.which) ? evt.which : event.keyCode if (charCode > 31 && (charCode < 48 || charCode > 57)) return false; return true; } Antes, eu chamava essa function no evento keypress do text box. ... "onkeypress"="return checkNumPg(evt)".. Agora, como preciso criar o campo dinamicamente, ficou assim: var inpTxtSaltarPg = criaDOM({elem:'INPUT', alvo:dvSaltarPg}) inpTxtSaltarPg.setAttribute('type','TEXT'); inpTxtSaltarPg.classList.add('mini') inpTxtSaltarPg.setAttribute('placeholder','000') inpTxtSaltarPg.setAttribute('id','jump') inpTxtSaltarPg.addEventListener('keypress', function(event) { checkNumPg(event) }) Mesmo chamando "return checkNumPg(event)" no momento de criar o campo pelo DOM, não funciona mais. Podem me ajudar?
  16. FabianoSouza

    Function para retornar JSON

    Olá pessoal. Eu já utilizo o FOR JSON PATH para retornar o o resultado de uma consulta com JSON. Isso eu já sei fazer. O que preciso é criar uma função que receba um SELECT como parâmetro e retorne o resultado desse SELECT já formatado como JSON. Estou tentando isso, mas sem sucesso. A function dbo.fn_retornaJsonPath : (@String NVARCHAR(MAX)) RETURNS NVARCHAR(MAX) AS BEGIN BEGIN IF @String <> NULL SET @String = (SELECT @String AS jsonPath FOR JSON PATH) END BEGIN IF @String IS NULL SET @String = '[]' END RETURN @String END Forma de executar: SET @sql = 'SELECT ' SET @sql = @sql + ' dbo.fn_retornaJsonPath ((SELECT TT.tema FROM dbo.tabela AS TT WHERE TT.cd = CTT.id)) AS ''temas'' ' SET @sql = @sql + ' FROM dbo.minhaTab AS CTT ' EXEC(@sql) Mas não está rolando....
  17. FabianoSouza

    Criar LI no topo da UL

    Galera, por padrão, cada LI que se cria (via jscript), vai parar na parte inferior da UL, né? Há uma maneira de fazer a LI criada pela minha function ir para o topo da lista dentro da UL?
  18. FabianoSouza

    Criar LI no topo da UL

    Muuito obrigado, @tetsuo Era exatamente isso que eu precisava.
  19. Gente, tenho as TRs da minha tabele já com os cantos arredondados (através das TDs first-child e last-child). Fiz dessa forma porque desconheço uma maneira de aplicar radius diretamente na TR. O problema é que ao colorir a TR com o over do CSS, perde-se a formatação do border radius das TDs e exibe a TR com os cantos quadrados. Preciso que os cantos fiquem arredondados mesmo ao passar o mouse sobre a TR. Como resolvo isso?
  20. FabianoSouza

    Aplicar border radius em mouseover numa TR

    Oi @Marcos_imasters. Obrigado pela atenção ao meu problema. Eu preciso que as TDs (primeira e última, de cada LINHA) fiquem com os cantos arredondados. Parece que a sua sugestão é para colunas. Eu quero que pareça que cada TR tenha seus cantos arredondados. Como não é possível fazer isso diretamente na TR, preciso que a primeira e a última TD de cada LINHA tenha seus cantos arredondados. Sendo a primeira TD (da cada linha) com o lado esquerdo arredondado, e a última TD (de cada linha) com o lado direito arredondado.
  21. FabianoSouza

    Retornar colunas da subconsulta

    Preciso corrigir o erro "Somente uma expressão pode ser especificada na lista de seleção quando a subconsulta não é introduzida com EXISTS." da minha consulta. SELECT TA.titulo AS 'Trilha' , (SELECT CAST(ROUND((Comportamental * 100.0) / (Comportamental + Técnico), 2) AS DECIMAL(5,1)) AS Comportamental ,CAST(ROUND((Técnico * 100.0) / (Comportamental + Técnico), 2) AS DECIMAL(5,1)) AS Técnico FROM ( SELECT SUM(CASE WHEN dbo.tabB.enfoque = '1' THEN 1 ELSE 0 END) AS Comportamental, SUM(CASE WHEN dbo.tabB.enfoque = '2' THEN 1 ELSE 0 END) AS Técnico, COUNT(*) AS Total FROM dbo.tabB ) tab ) FROM dbo.tabA AS TA Nessa consulta, preciso trazer o título (da tabA) e o resultado de um cálculo feito na subconsulta, nos campos Comportamental e Técnico.
  22. FabianoSouza

    Ténica para gravar dados

    Eu gostaria de contar com a experiência dos colegas para sanar a seguinte dúvida. Estou em dúvida se crio procedures específicas para fazer INSERT e outra para fazer UPDATE no banco, ou se utilizo a mesma procedure para realizar as duas operações. A dúvida é mais em relação a "técnica" ou "metodologia", do que codificação. Penso que ter apenas 01 procedure que pode realizar as duas operações ajuda a manter certo padrão (já que as variáveis seriam as mesmas para as duas operações) e facilita a manutenção. Porém, numa situação de UPDATE eu tenho um parâmetro adicional que é o ID do registro que vou querer atualizar. Na operação de INSERT não existe esse parâmetro (pq o registro ainda não existe no bd). Então seria esse o meu dilema...saber dos colegas, qual abordagem faz mais sentido. Isso é importante porque tenho dezenas de procedures no meu projeto. Não me importo em fazer ajustes em todas, mas queria definir o melhor método (considerando o cenário acima citado) para implementar como padrão. Grato.
  23. FabianoSouza

    FileReader retornando valor

    Preciso: 1) Fazer a renderização de imagem 2) Preciso que essa mesma function retorno algum valor de "status", para eu utilizar pela "function pai". A function funciona, renderiza a imagem quando click num botão. Mas não retorna corretamente o valor da variável msg Ilustrando: Essa seria a function "pai" renderImg(obj), que passa os parâmetros necessários para a function que faz o render. //chamo essa function no click de um botão (e passo parâmetros) renderImg(obj) //************************************************ // renderiza imagem selecionada no computador do usuário function renderImg(e) { var $elemImg = e.alvo , ofile = e.inpfile , reader = new FileReader() , files = e.inpfile.files // FileList object , path = e.path; var msg = '' reader.onload = (function(theFile) { return function(e) { //renderiza prévia da imagem $elemImg.setAttribute('src', e.target.result) var msg = "OK!"; }; }) (files[0]); //Read in the image file as a data URL. reader.readAsDataURL(files[0]); reader.onerror = function(event) { msg = "ERRO" } //Preciso que a variável msg retorno os status de sucesso ou erro. return msg }
  24. FabianoSouza

    Tratar caracteres especiais

    Olá pessoal. Eu estou procurando por alguma função que trate caracteres especiais, tanto no momento de gravar (insert e update) quanto no momento de exibir (select). Busco uma function que varra a string e faça um "encode" de caracteres como &, #, <, >, ¨, * e outra function que faça um "decode" do que valores "codificados" que estiverem gravados. Valew!
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.