
fulvio
Moderadores-
Total de itens
1.218 -
Registro em
-
Última visita
Tudo que fulvio postou
-
Boa tarde Fernandinha, Para procurar quem teve mais de 7 faltas: agrupamento por aluno, count na frequência=ausencia, no final da sintaxe group by, colocar o having count(frequencia)>=7. Até ai tudo bem... mas o problema será identificar a sequência destas faltas. Se elas tiverem que ser consecutivas, terá q identificar um campo que tenha esta cronologia. Se por exemplo for a data da aula ou data da inserção, terá q fazer uma verificação na data para identificar se entre uma e outra ausência, não tenha nenhuma presença. Aí encontrará a consecutividade...
-
Filtrar tabela (item mais frequente para cada produto)
pergunta respondeu ao carlos.tedesco de fulvio em SQL Server
Bom dia Carlos, Pelo q entendi, a tabela de retorno ficará um pouco diferente do que postou... :.) Postei um exemplo logo abaixo, fazendo um agrupamento por cod_prod e cod_forn, contando os registros inseridos e ordenando (decrescente) pela quantidade contada. Para pegar os 5 fornecedores que mais forneceu, dar um select top 5. Espero que ajude: -- criação da tabela CREATE TABLE #Produtos (cod_prod int, cod_forn int) -- inserção dos dados INSERT INTO #Produtos VALUES (1825, 32) INSERT INTO #Produtos VALUES (1825, 20) INSERT INTO #Produtos VALUES (1825, 32) INSERT INTO #Produtos VALUES (1825, 32) INSERT INTO #Produtos VALUES (1230, 20) INSERT INTO #Produtos VALUES (1230, 20) INSERT INTO #Produtos VALUES (1230, 20) INSERT INTO #Produtos VALUES (1230, 20) INSERT INTO #Produtos VALUES (1230, 32) SELECT cod_prod, cod_forn, count(cod_forn) FROM #Produtos GROUP BY cod_prod, cod_forn ORDER BY 3 DESC -
Boa tarde Ede, Os protocolos de acesso estão ativados? Firewall desativado? Na máquina client, dê um ping na máquina para verificar se está acessível. Qual o win q está instalado no client? Vá no Painel de controle / Ferramentas administrativas / Fontes de Dados / Guia Fonte de Dados de usuário. Verifique se possui um drive ODBC instalado para o client (sql native client).
-
Bom dia Ede, você está precisando acessar a base através de seu aplicativo? Qual sql está instalado em sua máquina? Veridique se os protocolos de acesso estão ativados.
-
rs... de nada. Precisando estamos ai!! :.)
-
Algumas estruturas realmente utilizam as datas desta forma. Já vi vários aplicativos novos assim, principalmente via web... Precisando estamos ai! :.)
-
Bom dia marloncos, Ai sim... rs. A quantidade de campos são fixas? Se for, poderá fazer da forma abaixo. -- criação de temporária CREATE TABLE #TAB1 (valor BIGINT) CREATE TABLE #TAB2 (valor BIGINT, cod VARCHAR(7)) CREATE TABLE #TAB3 (valor BIGINT, cod VARCHAR(7)) -- inserção dos dados insert into #TAB1 values(1233440000) insert into #TAB2 values(123344,'AAACCBB') insert into #TAB3 values(55321, 'AAACCBB') -- consulta SELECT t.valor, t3.valor FROM #TAB1 t, #TAB2 t2, #TAB3 t3 WHERE LEFT(t.valor,6)=t2.valor AND t2.cod=t3.cod Mas se a quantidade de campos for dinâmica e você quiser retirar apenas os 4 ultimos digitos, ai terá que fazer de outra forma: SELECT substring(cast(valor as VARCHAR), 1, LEN(valor)-4) FROM #TAB1
-
Boa tarde Wagner, O problema de se trabalhar com data separada dia/mes/ano, é exatamente este: dificultadade na hora de resgatar intervalos entre datas. Como o sql não trata os campos como sendo DATA, fica muito dificil de manipular os campos assim. Creio que seja praticamente impossível, pois o sql não vai identificar uma cronologia correta. O melhor dica seria a concatenação dos dia/mes/ano, gerando uma data "correta" para o sql. Desta forma, conseguirá realizar a soma. O problema com certeza não está na função SUM, mas sim no formato da data.
-
Boa tarde marloncos, rs... nada é impossível!! Pode até fazer muita gambiarra, mais impossível nunca... rs Segue um exemplo ai. Olha se é isso que precisa: -- criação de temporária CREATE TABLE #TAB1 (valor BIGINT) CREATE TABLE #TAB2 (valor BIGINT, cod VARCHAR(7)) CREATE TABLE #TAB3 (valor BIGINT, cod VARCHAR(7)) -- inserção dos dados insert into #TAB1 values(1233440000) insert into #TAB2 values(1233440000,'AAACCBB') insert into #TAB3 values(55321, 'AAACCBB') -- consulta SELECT t.valor, t3.valor FROM #TAB1 t, #TAB2 t2, #TAB3 t3 WHERE t.valor=t2.valor AND t2.cod=t3.cod
-
Bom dia Pedro, Para você pegar o ultimo registro, o certo teria q criar uma data de inserção dos registros... Como você tem duas datas iguais para o mesmo trecho, o sql vai lendo os dados e armazenando. Por exemplo: Id=5, Trecho=30. Se estiver agrupando, o sql vai pegar o primeiro registro que ler do trecho 30 e armazenar. No próximo trecho=30, se a data for maior, o registro é substiuito. Se for menor ou igual, nada é feito. Sendo assim, o registro do trecho=30 não é substituido pelo "último inserido". Segue um exemplo no sql: CREATE TABLE #teste (id INT, trecho INT, programa INT, DATA DATETIME, situacao INT) INSERT INTO #teste VALUES (1 , 60 , 1 , '2010-01-10' , 1) INSERT INTO #teste VALUES (2 , 60 , 1 , '2012-01-11' , 2) INSERT INTO #teste VALUES (3 , 50 , 2 , '2012-01-10' , 1) INSERT INTO #teste VALUES (4 , 40 , 2 , '2012-01-10' , 1) INSERT INTO #teste VALUES (5 , 30 , 1 , '2012-01-10' , 1) INSERT INTO #teste VALUES (6 , 30 , 1 , '2012-01-10' , 2) INSERT INTO #teste VALUES (7 , 60 , 2 , '2012-01-10' , 1) SELECT trecho, programa, max(DATA) FROM #teste GROUP BY trecho, programa
-
O MSSQL limpa os espaços no retorno da query.
pergunta respondeu ao erisompimenta de fulvio em SQL Server
Bom dia Erisom, Se você gravar o string '2132L ' no banco de dados, ele irá te retornar a mesma coisa: '2132L ' (com o espaço em branco no final). As vezes na hora de gravar, o aplicativo está suprimindo os espaços em branco (que a maioria dos aplicativos fazem). Verifique esta implementação. -
(Resolvido) SOMAR VALORES DE DOIS CASES
pergunta respondeu ao Vinicius Schuh de fulvio em SQL Server
rs... ferias mais q merecidas... Fico feliz por ter resolvido!!! :.) Um abraço. -
Bom dia Vitor, Tem como você criar sqls dinâmicos... você pode criar variáveis para gerar os sqls a serem executados. Desta forma, conseguirá executar para cada linha. Para cada valor dinâmico (como a tabela, coluna, Id, etc) pode-se criar uma variável e ir acrescentado no script para execução. Segue um exemplo e espero q ajude: declare @sql VARCHAR(100) declare @variavel VARCHAR(100) SET @variavel = 'GETDATE()' SET @sql = 'SELECT ' + @variavel EXEC (@sql)
-
Alterar valor da coluna de todas as linhas, exceto da última.
pergunta respondeu ao andersonrc de fulvio em SQL Server
Bom dia Anderson, Neste caso, creio que não vai precisar utilizar o IF. você pode fazer o update utilizando a cláusula WHERE: UPDATE TabelasBanco SET FlagCarga = 'CA' WHERE cod in (select .... from TabelasBanco where...) Neste update, você fará um subselect para listar todos os registros que já estão inseridos na tabela. O resultado trará os dados já inseridos, e o update irá atualizá-los. Depois fará o insert utilizando a mesma teoria, mas agora pegando os registros que NÃO estejam inseridos. -
Bom dia Nelson, Verifique se os protocolos de conexão do sql estão ativos e funcionantes.
-
Bom dia Diego, Para pagar o ID da tabela, poderá utilizar a sintaxe: SELECT id FROM sysobjects WHERE NAME LIKE 'Nome_Tabela'
-
Bom dia ViaPocket, Desculpe pela demora da resposta, mas estava de férias... rs. Houve uma duplicação do resultado provavelmente por causa do evento, não? Verifique as informações nas linhas duplicadas para identificar o motivo. A modelagem deve ser montada / alterada de acordo com as necessidades do uauário. Se não houver sentido o relacionamento, então está correto o seu raciocínio.
-
(Resolvido) SOMAR VALORES DE DOIS CASES
pergunta respondeu ao Vinicius Schuh de fulvio em SQL Server
Bom dia Vinicius, A resposta demorou um pouco porque estava de férias.... rs. O erro não está relacionada a parametrização. Um dos seus subselects estão retornando mais de 1 valor. Esta forma, o erro descrito acima ocorre. Execute os subselects a parte e identifique qual está retornando mais de 1 valor. -
(Resolvido) SOMAR VALORES DE DOIS CASES
pergunta respondeu ao Vinicius Schuh de fulvio em SQL Server
rs... o bom q todos vamos aprendedo juntos!!! :.) Depois passo a conta... rs. Brincadeira... -
(Resolvido) SOMAR VALORES DE DOIS CASES
pergunta respondeu ao Vinicius Schuh de fulvio em SQL Server
Boa tarde Vinicius, rs... não tá fazendo nada de errado. Como você atribui os valores às variáveis, o sql não retorna o select, mas seta as variáveis com os valores correspondentes. Aí você faz a manipulação que desejar..... Dá um select nas variáveis q verá os valores: Declare @Aberto int, @Fechado int, @NM_Func varchar(40), @ID_Func int, @Mes int, @NM_Mes varchar(15), @DT_Imp varchar(30) SELECT @Aberto = (SELECT Case When NO_Venda Is Null Then Count(CódigoDoFuncionário)When NO_VENDA Is Null Then 0 End FROM dbo.Orçamento GROUP BY no_venda), @Fechado = (Select Case When NO_Venda Is Not Null Then Count(CódigoDoFuncionário) When NO_VENDA IS NULL THEN '0' End FROM dbo.Orçamento GROUP BY no_venda), @ID_Func = dbo.Orçamento.CódigoDoFuncionário, @NM_Func = dbo.Funcionários.NomeDoFuncionário, @Mes = Month(dbo.Orçamento.DataDoOrçamento), @NM_Mes = Case Month(dbo.Orçamento.DataDoOrçamento) When '1' Then 'JANEIRO' When '2' Then 'FEVEREIRO' When '3' Then 'MARÇO' When '4' Then 'ABRIL' When '5' Then 'MAIO' When '6' Then 'JUNHO' When '7' Then 'JULHO' When '8' Then 'AGOSTO' When '9' Then 'SETEMBRO' When '10' Then 'OUTUBRO' When '11' Then 'NOVEMBRO' When '12' Then 'DEZEMBRO' End, @DT_Imp = GETDATE() FROM dbo.Orçamento INNER JOIN dbo.Funcionários On dbo.Orçamento.CódigoDoFuncionário = dbo.Funcionários.CódigoDoFuncionário GROUP BY Month(dbo.Orçamento.DataDoOrçamento), dbo.Funcionários.NomeDoFuncionário, dbo.Orçamento.CódigoDoFuncionário, NO_Venda ORDER BY dbo.Funcionários.NomeDoFuncionário, Month(dbo.Orçamento.DataDoOrçamento) SELECT @Aberto SELECT @Fechado SELECT @NM_Func SELECT @ID_Func SELECT @Mes SELECT @NM_Mes SELECT @DT_Imp -
ajuda em query - percentual com o resultado da soma
pergunta respondeu ao ROMANVPP de fulvio em SQL Server
Bom dia ROMANVPP, Crie uma temporária utilizando o select e depois faça a porcentagem q necessita, a partir da temporária. Caso queira fazer no mesmo select, terá q repetir a parte do sql q retorna a soma dos valores, para fazer a porcentagem (vai ficar bem grande e mais complexo para realizar a manutenção). -
Problema - Conversor de Data e Horas para Dias
pergunta respondeu ao Johnnny de fulvio em SQL Server
Bom dia Johnnny, O que está querendo retornar com esta função? Quando você converte apenas horas, o sql por default preenche a data com 1900-01-01.... Fale-me qual o resultado de retorno q deseja q podemos fazer umas adaptações.... rs. -
Constraint Check que permite somente 2 campos iguais
pergunta respondeu ao EMSO.EXE de fulvio em SQL Server
Bom dia Emso, Uma procedure resolve, mas perde em performance. Quando a procedure é chamada, ela não é executada em paralelo. Isso significa q se vários usuários a chamarem ao mesmo tempo, o processamento será enfileirado. Poderá fazer uma trigger para resolver este caso, ou uma função. O mais interessante seria o tratamento desta situação no próprio fonte, fazendo uma pesquisa direta na base. -
Bom dia Tonblz, Quando você vai apontar o cursor para a próxima posição, não está referenciando o cursor em aberto: Está assim: --PASSANDO PARA PROXIMO REGISTRO FETCH NEXT FROM C_ORDEM_MAQ INTO @IDPARADA,@IDMAQUINA,@IDORDEM,@IDMOTIVO1,@IDMOTIVO2 ,@IDMOTIVO3,@DATAINI,@DATAFIM,@HORAINI,@HORAFIM Seria assim: --PASSANDO PARA PROXIMO REGISTRO FETCH NEXT FROM C_PARADAS INTO @IDPARADA,@IDMAQUINA,@IDORDEM,@IDMOTIVO1,@IDMOTIVO2 ,@IDMOTIVO3,@DATAINI,@DATAFIM,@HORAINI,@HORAFIM
-
(Resolvido) SOMAR VALORES DE DOIS CASES
pergunta respondeu ao Vinicius Schuh de fulvio em SQL Server
Bom dia Vinicius, rs... contrariando nada.... as vezes para o seu problema a melhor forma será mesmo a criação de variável!! :.) Tem como você fazer o select e atribuir o valor automaticamente... mas temos algumas restrições. Ex.: DECLARE @Aberto int -- Desse jeito dá certo. SELECT @Aberto=(SELECT max(NO_VENDA) FROM Orçamento) FROM Orçamento SELECT @Aberto -- Desse jeito não dá certo, pois todos os valores de retorno devem ser atribuidos a uma variável. SELECT @Aberto=(SELECT max(NO_VENDA) FROM Orçamento), NO_VENDA FROM Orçamento SELECT @Aberto -- Desse jeito funciona, mas todos os outros retornos devem ser associados a uma variável. SELECT @Aberto = (SELECT Case When NO_Venda Is Null Then Count(CódigoDoFuncionário)When NO_VENDA Is Null Then 0 End FROM dbo.Orçamento GROUP BY no_venda), dbo.Funcionários.NomeDoFuncionário, Month(dbo.Orçamento.DataDoOrçamento) As Mes, NM_Mes = Case Month(dbo.Orçamento.DataDoOrçamento) When '1' Then 'JANEIRO' When '2' Then 'FEVEREIRO' When '3' Then 'MARÇO' When '4' Then 'ABRIL' When '5' Then 'MAIO' When '6' Then 'JUNHO' When '7' Then 'JULHO' When '8' Then 'AGOSTO' When '9' Then 'SETEMBRO' When '10' Then 'OUTUBRO' When '11' Then 'NOVEMBRO' When '12' Then 'DEZEMBRO' End, dbo.Orçamento.CódigoDoFuncionário, ABERTO = Case When NO_Venda Is Null Then Count(Orçamento.CódigoDoFuncionário)When NO_VENDA IS NULL THEN '0' End, FECHADO = Case When NO_Venda Is Not Null Then Count(Orçamento.CódigoDoFuncionário) When NO_VENDA IS NULL THEN '0' End, GETDATE() As DT_Imp FROM dbo.Orçamento INNER JOIN dbo.Funcionários On dbo.Orçamento.CódigoDoFuncionário = dbo.Funcionários.CódigoDoFuncionário GROUP BY Month(dbo.Orçamento.DataDoOrçamento), dbo.Funcionários.NomeDoFuncionário, dbo.Orçamento.CódigoDoFuncionário, NO_Venda ORDER BY dbo.Funcionários.NomeDoFuncionário, Mes