
fulvio
Moderadores-
Total de itens
1.218 -
Registro em
-
Última visita
Tudo que fulvio postou
-
Bom dia Vitor, Será um pouco mais complexo fazer esta manipulação, mas tem jeito. Uma idéia: - Criar uma temporária com os nomes das colunas da tabela inven (syscolumns). - Criar variáveis inteiras com os números que deseja pesquisar e alterar (inteiras para ficar fácil o incremento). - Montar o script dinamicamente e armazenar em uma varíavel. - Fazer loop para executar o script da variável (exec (@VariavelCriada)). Provavelmente presisará de dois loops, pois terá que rastrear o número X em todas as colunas, depois o número X+1 nas mesmas colunas, e assim por diante. Já fiz vários processos destes. Basta ter um pouco de atenção que sai ok... rs. Não sei o seu nível de conhecimento em SQL, mas caso seja básico, aconselho um auxílio!! ;.) Faça os testes em um base deparada, para não ter dor de cabeça depois. Se tiver alguma dúvida, pode postar. Espero ter ajudado. :.)
-
Boa tarde Fagner, você pode utilizar a função MAX. Não conheço a estrutura do BD, mas dê uma olha se é isto: SELECT trelsld.datamovimento, max(trelsld.sequencial), tprd.codigoprd, trelsld.saldomov, trelsld.customedmov, trelsld.totalmov, (case to_char(trelsld.datamovimento,'mm') when '01' then 'JANEIRO' when '02' then 'FEVEREIRO' when '03' then 'MARÇO' when '04' then 'ABRIL' when '05' then 'MAIO' when '06' then 'JUNHO' when '07' then 'JULHO' when '08' then 'AGOSTO' when '09' then 'SETEMBRO' when '10' then 'OUTUBRO' when '11' then 'NOVEMBRO' when '12' then 'DEZEMBRO' end) MESES from trelsld ,tprd, tprdcompl where trelsld.codcoligada=2 AND trelsld.datamovimento>='01/01/2010' and trelsld.datamovimento<='31/07/2010' and trelsld.idprd = tprd.idprd and tprd.idprd = tprdcompl.idprd and trelsld.codcoligada = 2 and trelsld.codfilial = 1 and tprd.codigoprd >= '83.10.0001' and tprd.codigoprd <= '83.10.0001' and trelsld.saldo = 2 and trelsld.saldomov >0 GROUP BY trelsld.datamovimento, trelsld.sequencial, tprd.codigoprd, trelsld.saldomov, trelsld.customedmov, trelsld.totalmov order by tprd.codigoprd
-
você testou com o provider "SQLNCLI"? Dê uma olhada nas configurações do servidor '10.50.80.90'. Terá que conferir todas as parametrizações necessárias. Alguns passos que me lembro de cabeça... rs: - Permitir conexões remotas à instância do SQL Server - Habilitar o protocolo TCP/IP para conexão e tráfego de informações - Iniciar o serviço do SQL Server Browser - Configurar o Firewall para permitir de tráfego de informações Dê uma pesquisada na net um passo a passo para verificar se suas configurações estão ok. Outra coisa: no SQL 2000, a funcão OpenQuery não funciona. A sintaxe correta é a segunda que postou.
-
Rs... de nada. Precisando estamos aí. Outra coisa importante que dá um trabalho feio: quando se utiliza o Left/right Join, os relacionamento vão se exponencializando... ao utilizar a função SUM, torna-se muito dificil ter uma soma "adequada". Uma dica interessante é utilizar o SUM mais simples possível. :.)
-
De nada! Precisando estamos ai. :.)
-
Boa tarde João, Neste caso você terá que utilizar um subselect, pois há maker´s que podem ter dois Types. Será listado os makers que fabricam SOMENTE PC´s. Dê uma olhada se é isto mesmo: select distinct maker from product where type='pc' and maker not in (select maker from #Teste where type ='laptop')
-
As informações do linked não estão corretas. Faça as alterações e vê se roda: OBS.: se for SQL 2005 ou 2008, prefiro utilizar o OpenQuery. EXEC sp_addlinkedserver @server = N'NomeLinkedServer', @srvproduct=N'sqloledb', @provider=N'SQLNCLI', @datasrc=N'10.50.80.90', @catalog=N'NomeBancoDados' select * from openquery (NomeLinkedServer, 'select * from ... ')
-
Bom dia Bráulio, Estava lento os posts e peguei como base o ultimo post mesmo... :.) Criei umas tabelas temporárias e fiz a somatória. Dê uma olhada se é isto mesmo. OBS.: 1 - O calculo do TOTAL de Prego que postou está ok: (25-2)+(4-9) = 18 Mas o calculo do Martelo não está: (20-4)+(12-8) = 20 --> na sua tabela está 12 2 - Os subselects se repetem pois não é possível utilizar os ALIAS para realizar cálculos no mesmo select. Script: create table #MateriaPrima (idMateriaPrima int, DescricaoMateriaPrima varchar(20)) insert into #MateriaPrima values (3, 'PREGO') insert into #MateriaPrima values (4, 'MARTELO') create table #Saida_Baixa (idMateriaPrima int, DescricaoMateriaPrima varchar(20), QuantBaixa int) insert into #Saida_Baixa values (4, 'MARTELO', 10) insert into #Saida_Baixa values (3, 'PREGO', 5) insert into #Saida_Baixa values (4, 'MARTELO', 10) insert into #Saida_Baixa values (3, 'PREGO', 10) insert into #Saida_Baixa values (3, 'PREGO', 10) create table #Saida_Devolucao (idMateriaPrima int, DescricaoMateriaPrima varchar(20), QuantBaixa int) insert into #Saida_Devolucao values (3, 'PREGO', 2) insert into #Saida_Devolucao values (4, 'MARTELO', 4) create table #Transferencia_Baixa (idMateriaPrima int, DescricaoMateriaPrima varchar(20), QuantBaixa int) insert into #Transferencia_Baixa values (4, 'MARTELO', 12) insert into #Transferencia_Baixa values (3, 'PREGO', 3) insert into #Transferencia_Baixa values (3, 'PREGO', 1) create table #Transferencia_Devolucao (idMateriaPrima int, DescricaoMateriaPrima varchar(20), QuantBaixa int) insert into #Transferencia_Devolucao values (3, 'PREGO', 9) insert into #Transferencia_Devolucao values (4, 'MARTELO', 8) select MP.idMateriaPrima, MP.descricaoMateriaPrima, (select sum(SB.QuantBaixa) from #Saida_Baixa SB where SB.idMateriaPrima=MP.idMateriaPrima) as Saida_Baixa, (select sum(SD.QuantBaixa) from #Saida_Devolucao SD where SD.idMateriaPrima=MP.idMateriaPrima) as Saida_Devolucao, (select sum(QuantBaixa) from #Transferencia_Baixa where idMateriaPrima=MP.idMateriaPrima) as Transferecia_Baixa, (select sum(QuantBaixa) from #Transferencia_Devolucao where idMateriaPrima=MP.idMateriaPrima) as Transferecia_Devolucao, (((select sum(SB.QuantBaixa) from #Saida_Baixa SB where SB.idMateriaPrima=MP.idMateriaPrima)- (select sum(SD.QuantBaixa) from #Saida_Devolucao SD where SD.idMateriaPrima=MP.idMateriaPrima)) + ((select sum(QuantBaixa) from #Transferencia_Baixa where idMateriaPrima=MP.idMateriaPrima) - (select sum(QuantBaixa) from #Transferencia_Devolucao where idMateriaPrima=MP.idMateriaPrima))) as Total from #MateriaPrima MP group by MP.idMateriaPrima, MP.descricaoMateriaPrima order by MP.idMateriaPrima Uma dica: postei em outro tópico, uma dica interessante sobre criação de tabela que faz calculos básicos dinamicamente. Não sei se é o caso, mas vale a pena conhecer: http://scriptbrasil.com.br/forum/index.php?showtopic=153403
-
Bom dia Rodrigo, Dá uma olhada no link. Espero que ajude. http://social.msdn.microsoft.com/forums/pt...9E-FD62932C4C4A
-
Boa tarde Amigo, São servidores distintos ou instâncias? Se forem instâncias, pode utilizar o comando USE para alterar as bases de dados. Se forem servidores, pode utilizar um linked server. Estas duas opções você conseguirá via Query Analyser.
-
O problema está no script mesmo. Se o nome do DB é Estoque, os arquivos primário e Log não podem ter o mesmo nome. Faça o teste aí. Mudei o nome dos arquivos: CREATE DATABASE Estoque ON PRIMARY ( NAME = Estoque_DB, FILENAME = 'C:\SQL\Estoquedb.mdf', SIZE = 300 MB, MAXSIZE = 500 GB, FILEGROWTH = 150 MB ), LOG ON ( NAME = Estoque_LOG, FILENAME = 'C:\SQL\Estoquelog.ldf', SIZE = 300 MB, MAXSIZE = 500 MB, FILEGROWTH = 150 MB )
-
Bom dia Daniel, Como está criando o BD? Foi via SMS ou script? Verifique na pasta se o arquivo mdf e ldf estão ok.
-
Então inverte os dias, meses e anos (igual o post que postei lá em cima). O formato da data no Banco é fundamental!! No meu Banco está YYYY-MM-DD. Olhe o formato do seu e inverta o script para que as datas fiquem corretas.
-
O script não funcionou? Testei aqui na minha máquina e funcionou certinho.
-
Rs... postei um exemplo completo pra vc. Criei uma tabela temporária nos moldes de sua base. Dê uma olhada se é isto mesmo. Segue script comentado: -- Criação de temporária create table #ITEM_CARNE (Mes SMALLINT, Ano SMALLINT) -- Inserção de dados insert into #ITEM_CARNE values (08, 2009) insert into #ITEM_CARNE values (09, 2009) insert into #ITEM_CARNE values (10, 2009) insert into #ITEM_CARNE values (1, 2010) insert into #ITEM_CARNE values (3, 2010) insert into #ITEM_CARNE values (5, 2010) insert into #ITEM_CARNE values (6, 2010) -- Conferência select * from #ITEM_CARNE -- Seleciona daqui até o final e roda Declare @AnoInicio SMALLINT Declare @MesInicio SMALLINT Declare @AnoFim SMALLINT Declare @MesFim SMALLINT select * from #ITEM_CARNE -- Pra alternar a data de pesquisa, altera os valores das variáveis Set @AnoInicio = 2009 Set @MesInicio = 10 Set @AnoFim = 2010 Set @MesFim = 05 select cast((convert(varchar,ANO) + '/' + convert(varchar,MES) + '/01') as datetime), * from #ITEM_CARNE where cast((convert(varchar,ANO) + '/' + convert(varchar,MES) + '/01') as datetime) BETWEEN cast((cast(@AnoInicio as varchar) + '/'+ cast(@MesInicio as varchar) + '/01') as datetime) and cast((cast(@AnoFim as varchar) + '/'+ cast(@MesFim as varchar) + '/01') as datetime)
-
A vírgula é primeiro, depois os três pontos.
-
Hehehehe.... sem problemas!! :.)
-
Bom dia Thiago, Perceba que o cliente pode ter comprado após a data de 31/12/2009. Se isso ocorrer, o resultado não deverá listar o cliente. Se for um select simples, o cliente pode ser listado, caso tenha compras acima da data limite pesquisada. Apenas a condição Where Data <= 'X' não funcionará. O subselect neste caso será inevitável, apesar da perda de performance. :.) Ex.: create table #Teste (Cliente varchar(1), Data datetime) insert into #Teste values ('A', '2009-12-31') insert into #Teste values ('A', '2010-01-05') Select * from #Teste Where Data<='2009-12-31' Select * from #Teste Where Data<='2009-12-31' AND NOT EXISTS ( SELECT * FROM #Teste WHERE Data >= '2010-01-01')
-
Dê uma olhada então nos dados que está tentando converter. Faz um select pra ver se existe algum mês fora do intervalo de 1 a 12. Mesmo esquema com os anos (creio que este ai não será o problema). Fiz um exemplo gerando o erro que postou: select cast ('2010-15-15' as datetime)
-
Dé uma olhada no formato da data. Este erro é porque está tentando converter pra uma data que não existe. Se você trocar o mês pelo dia, dá erro de conversão, entendeu? Ex.: você está falando que é o dia 20, mas na conversão o sql está entendendo que o mês é 20. Como não existe, aparece o erro de conversão. Se o formato for em inglês, faça AAAAMMDD. Provavelmente deve ser este... apenas troque a ordem do dia pelo mês.
-
Boa tarde Pedro, Forma de se fazer tem sim. Mas não há nenhuma função no sql que faça isto para vc. Terá que criar uma função para fazer este agrupamento. Como criar: - Criar uma tabela temporária, ordenada pela primeira coluna (que seria a coluna dos intervalos), com uma coluna de Controle. - Criar variáveis: numeração inicial e final. - Loop varrendo as linhas para saber se o valor pesquisado se encontra nas linhas subsequentes. Espero ter ajudado... :.)
-
Boa tarde Amigo, Entedi o problema. A única dúvida é a entrada dos dados de pesquisa... Quando você diz q a data de pesquisa está entre 12/2009 e 01/2010, a data está neste formato? O problema de utilizar comparações de datas com campos numéricos, é á diferença no modo de comparação: - Para você saber se uma data é menor que a outra, é necessário ter o ano. - Para saber se um número é menor que o outro, apenas uma comparação simples basta. É um pouco "lógico" eu falar isto, mas quando se programa, as coisas não ficam tão lógicas.... rs. Vi que faz o convert pra concatenar os campos das datas. O que me parece que está faltando é a conversão da data concatenada para o tipo DATA. Ai, você poderá fazer uma comparação entre datas. Desta forma, você está comparando string com string. Ficaria mais ou menos assim: select cast((convert(varchar,ano) + '/01/' + convert(varchar,mes)) as datetime) from ALUNO where cast((convert(varchar,ano) + '/01/' + convert(varchar,mes)) as datetime) BETWEEN cast(('2009' + '/01/'+ convert(varchar,mes)) as datetime) and cast(('2010' + '/01/'+ convert(varchar,mes)) as datetime) CONSIDERAÇÕES: - Perceba que não converti o ano de pesquisa 2009 e nem 2010. Basta colocar aspas simples para identifica pro sql que é caracteres. Se não colocar, a função + tentará somar, e não concatenar. - Atenção ao formato da data. Vi que no seu exemplo colocou AAAADDMM. Verifique se o formato está ok. - Colocou também o acrescimo de 0 no mês. Na conversão, o sql "entede" o formato e já ajusta o campo. Espero que ajude a resolver o problema... Qualquer dúvida, posta ai!!! :.)
-
Boa tarde, Creio que o script que o João postou é o correto, uma vez que o cliente pode ter comprado após a data de 31/12/2009. Se isso ocorrer, o resultado não deverá listar o cliente. Apenas uma otimização: ao invés de colocar "SELECT * FROM" no subselect, trocaria pela chave da tabela "SELECT ID FROM"; e ao invés do "AND NOT EXISTS" colocaria "AND ID NOT IN..." :.)
-
Bom dia Guto, Infelizmente em trb de escola não gosto de ajudar. :.( Esta é a hora de aprender....
-
Comando Delete "Somente Palavra da Coluna"
pergunta respondeu ao Gean Carlos de fulvio em SQL Server
Bom dia Gean, você utilizou o código (como postou): SA1 update SA1 set A1_EMAIL=(replace(A1_EMAIL, 'NFE@CONTROLESVISUAIS.COM.BR,', ' ')) A tabela "SA1" não precisa estar no começo do update. O certo é: update SA1 set A1_EMAIL=(replace(A1_EMAIL, 'NFE@CONTROLESVISUAIS.COM.BR,', ' '))