Jump to content

JoseDR

Members
  • Content count

    30
  • Joined

  • Last visited

Community Reputation

6 Regular

1 Follower

About JoseDR

  • Rank
    José Diz

Informações Pessoais

  • Sexo
    Masculino
  • Localização
    Belo Horizonte, MG - Brasil

Contato

  1. JoseDR

    Valores Negativos - Base FGTS

    Se o que necessita é somente o valor final do somatório, talvez a sugestão abaixo seja mais simples: -- código 1 SELECT Sum(case when (BASEFGTS is null or BASEFGTS <= 0) then 0 else BASEFGTS end + case when (BASEFGTS13 is null or BASEFGTS13 <= 0) then 0 else BASEFGTS13 end + case when (BASEFGTSDIFSAL is null or BASEFGTSDIFSAL <= 0) then 0 else (BASEFGTSDIFSAL * 0.01) end ) as DARF from PFPERFF where CODCOLIGADA = 1 and ANO = 2015 and MES = 3 and NROPERIODO = 1; _____ José Diz Belo Horizonte, MG - Brasil
  2. JoseDR

    Expressão CASE não funciona com campo datetime

    Fabiano, quando se verifica se uma expressão está sem informação (NULL), o correto é expressão is null. Não utilize expressão = null. Vide ANSI_NULLS. Com relação ao código, eis sugestão: -- código 1 with DT as ( SELECT DatasCodItem, Min(DatasDataInicio) as DataInicio from Datas group by DatasCodItem, DatasCodServico ) SELECT T.CodProprietario, T.TreinamentosTitulo, T.Arquivamento, Coalesce(Convert(char(10), DT.DataInicio, 103), '-') as DataInicio from Treinamentos as T left outer join DT on DT.DatasCodItem = T.TreinamentosCod; Se nos explicar qual é o objetivo do código, sugestões mais eficazes poderão ser propostas. _____ José Diz Belo Horizonte, MG - Brasil
  3. Ficaria assim: -- código 1 v2 declare @DataInicial datetime, @DataFinal datetime; set @DataInicial= Convert(datetime, '1/1/2015', 103); set @DataFinal= Convert(datetime, '28/2/2015', 103); SELECT Cliente, [Total protocolos]= Count(distinct Protocolo), [Valor Total]= Sum(Valor) from tabela where CadastradoEm between @DataInicial and @DataFinal group by Cliente;
  4. No código 1 substitua a linha 7 de Quantidade= Count(Categoria), por [Total protocolos]= Count(distinct Protocolo), Além disso, substitua toda ocorrência de "Categoria" por "Cliente".
  5. JoseDR

    Filtrar dados a partir de campos DateTime

    Internamente o SQL Server armazena as datas em um formato próprio, que depende do tipo de dados (date, datetime, datetime2 etc). Ele não armazena no formato "yyyy/mm/dd" ou similares. Para atender ao que necessita, basta declarar as variáveis @dtInicial e @dtFinal como datetime e utilizar a função Convert() para definir os valores nessas variáveis. O resto fica do jeito que está. declare @dtInicial datetime, @dtFinal datetime; set @dtInicial= Convert(datetime, '20/1/2015', 103); set @dtFinal= Convert(datetime, '28/2/2015', 103); SELECT ... A coluna Cadastro, declarada como datetime, armazena somente datas (por exemplo, "2015-02-15 00:00:00.000") ou também horário (por exemplo, "2015-02-15 18:22:33.187")? Em tempo, evite a utilização de funções na cláusula WHERE que atuem diretamente sobre colunas da tabela. Isso pode causar Index/Table Scan e degradar a performance da consulta. _____ José Diz Belo Horizonte, MG - Brasil
  6. Além da clausula GROUP BY, citada anteriormente por Motta, você necessitará das funções Count() e Sum(), além da cláusula WHERE. A sugestão abaixo considera que na coluna CadastradoEm somente existe data, sem horário. -- código 1 declare @DataInicial datetime, @DataFinal datetime; set @DataInicial= Convert(datetime, '1/1/2015', 103); set @DataFinal= Convert(datetime, '28/2/2015', 103); SELECT Categoria, Quantidade= Count(Categoria), [Valor Total]= Sum(Valor) from tabela where CadastradoEm between @DataInicial and @DataFinal group by Categoria; _____ José Diz Belo Horizonte, MG - Brasil
  7. JoseDR

    Extrair parte do texto de um campo

    Motar, o código 1 foi criado considerando-se que há quatro elementos na coluna e que os elementos estão separados pelo caractere ";", conforme o exemplo que você postou: 4 elementos, 3 separadores ";". Antes de postar a sugestão presente no código 1 eu a testei e funcionou corretamente. Se algo a mais está sendo mostrado nos testes que você fez, uma possibilidade é que os dados não estão conforme o exemplo que postou; poderia verificar? Para comprovar a correção do código: use TempDB; CREATE TABLE tabela (coluna varchar(200)); INSERT into tabela values ('250;Escola;Musíca;2015'); go -- with Tabela_2 as ( SELECT coluna, Pos2= CharIndex(';', coluna, (CharIndex(';', coluna)+1)), Pos3= DataLength(coluna) - CharIndex(';', Reverse(coluna)) +1 from tabela ) SELECT coluna, Elemento= Substring(coluna, (Pos2 +1), (Pos3 - Pos2 -1)) from Tabela_2; -- DROP TABLE tabela;
  8. JoseDR

    Extrair parte do texto de um campo

    Tenho uma tabela que tem um campo semelhante a este; 250;Escola;Música;2015 Pretendo extrair a palavra entre o 2 e o 3 ; (Música) Tem como fazer isso? ---- Sim, várias formas. A mais simples é utilizar a função CharIndex para encontrar as posições do segundo e terceiro ";", calcular o tamanho do elemento e então utilizar a função SubString para extrair o elemento desejado. -- código 1 with Tabela_2 as ( SELECT coluna, Pos2= CharIndex(';', coluna, (CharIndex(';', coluna)+1)), Pos3= DataLength(coluna) - CharIndex(';', Reverse(coluna)) +1 from tabela ) SELECT coluna, Elemento= Substring(coluna, (Pos2 +1), (Pos3 - Pos2 -1)) from Tabela_2; No código acima substitua toda ocorrência de "coluna" pelo nome da coluna e "tabela" pelo nome da tabela. O código 1 funciona desde que sempre existam 4 campos na coluna, separados por ";". Há formas mais elaboradas de se obter o mesmo resultado. _____ José Diz Belo Horizonte, MG - Brasil
  9. JoseDR

    Atualizando uma Tabela no BDD

    Pabullo, existem algumas formas de acessar dados em planilhas eletrônicas; uma delas é a função OPENROWSET. Você encontra outras dicas no documento How to import data from Excel to SQL Server. Using OPENROWSET to Read Excel Worksheets from SQL Server____ José Diz Belo Horizonte, MG - Brasil
  10. JoseDR

    query update

    E como se relaciona a tabela1 com a tabela2? Isto é, com qual coluna da tabela1 que se relaciona a colunaZ da tabela2? No trecho set colunaX =+1 você deseja definir o valor 1 para colunaX OU deseja somar 1 no valor de colunaX?
  11. JoseDR

    Retornar Backup Sem Apagar os Dados Atuais

    Antes de restaurar parcialmente o banco de dados, é necessário analisar o diagrama do banco de dados (modelagem física) e verificar como é o relacionamento das duas tabelas com as demais, para não tornar o banco de dados inconsistente.
  12. Cirilo, funcionava na versão 2008? :coolio: A mensagem de erro aponta para a cláusula ORDER BY. Uma opção é reescrever a cláusula, passando para Order by você.ordem, perclick Desc Para ORDER BY existe diferença entre você.perclick (uma coluna da tabela) e perclick (o alias criado para a coluna de saída). Entretanto, o que eu faria seria evitar que o alias tivesse o mesmo nome da coluna. Agora, quando encontro um comando SELECT com a cláusula GROUP BY imensa, com (quase) todas as colunas que fazem parte da lista_de_seleção, logo percebo um comando que deveria ser reescrito. ----- José Diz Belo Horizonte, MG - Brasil -----
  13. JoseDR

    Converter Minutos em horas e minutos

    "Estou com um campo em uma tabela que grava as horas em Minutos atingindo seus 1440 minutos por dia. Como eu faria para converter este valor em hh:mm?" -- Uma forma simples é -- código 1 SELECT MinutosD, Convert(char(5), DateAdd(minute, MinutosD, 0), 108) as HHMM from Tab; onde MinutosD é o nome da coluna que contém o acumulado em minutos e Tab é o nome da tabela. Observe que é uma solução simples mas que funciona para valores de MinutosD menores do que 1440. Afinal, 1440 são 24 horas, que é o mesmo que 1 dia. Expressões horárias armazenam até 23 horas ou 59 minutos ou 59 segundos. Não é correto representar 24:00 ou ainda 23:60, pois é considerado 1d 0h 00min, onde d é abreviatura de dia. Mas se o valor da coluna MinutosD pode atingir 1440, ou mesmo ultrapassar este valor, pode-se utilizar outra forma que retorna horas acumuladas, sem respeitar a regra 23:59:59: -- código 2 SELECT MinutosD, Cast( Floor(MinutosD / 60) as varchar) + ':' + Right('00' + Cast( Floor((MinutosD % 60)) as varchar), 2) as HHMM from Tab; ---- José Diz Belo Horizonte, MG - Brasil ----
  14. Yoshi, a principal restrição da edição Express do SQL Server é a capacidade de processamento, limitada a 1 GiB de memória principal por instância e somente um processador (até 4 núcleos) por instância. Em um mesmo servidor você pode instalar até 50 instâncias e em cada instância não há limite do número de bancos de dados, mas na edição Expresss cada banco de dados pode ter no máximo 10 GiB (a partir da versão 2008 R2, inclusive). José Diz Belo Horizonte, MG - Brasil
  15. JoseDR

    performance

    Simenes, o leiaute 1 me pareceu uma variação do Modelo Entidade-Atributo-Valor, ou Modelo EAV. Qual é o contexto do sistema e do banco de dados? Isto é, para que eles serão utilizados? Teve a oportunidade de normalizar as estruturas, para verificar se é possível a utilização do modelo relacional? Talvez possa utilizar um modelo híbrido, com somente uma das tabelas utilizando a estrutura EAV otimizada. Para consultar: - Modelo Entidade-Atributo-Valor - Uma proposta de modelagem de dados para criação de fichas clínicas dinâmicas - Sparse matrix
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.