-
Content count
921 -
Joined
-
Last visited
-
Olá. Se eu fizer um JOIN vai acabar exibindo turmas repetidas.
-
FabianoSouza started following Permitir apenas Inteiro em text box, SELECT de registros sem associação, com subquery, Reutilizar contagem em SELECT and and 6 others
-
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
-
Olá @Motta Eu queria evitar a repetição do COUNT apenas para ter melhor desempenho e reutilizar a informação.
-
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 + ' '+'<span class=%22icon-aviso fcolor-critico%22 style=%22font-size:18px%22 title=Excesso de 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'
-
Ops. Encontrei o problema. Podem desconsiderar esse post, por gentileza. Eu não estava linkando o arquivo B corretamente.
-
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)
-
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'
-
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
-
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
-
Passar argumentos para function em SQL dinâmico
FabianoSouza replied to FabianoSouza's topic in SQL Server
@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. -
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?
-
Sim. Esse seria o erro?
-
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')
-
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) }; })
-
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?