Ir para conteúdo
Fórum Script Brasil

fulvio

Moderadores
  • Total de itens

    1.218
  • Registro em

  • Última visita

Tudo que fulvio postou

  1. beleza Alan... Quanto a sua dúvida o entendimento é bem simples, mas é um pouco complicado de explicar... rs. Vamos lá: Neste caso: SELECT F.CODCFO, SUM(M.VALORLIQUIDO) AS VALOR FROM TMOV M, FCFO F WHERE F.CODCFO=M.CODCFO GROUP BY F.CODCFO ORDER BY VALOR DESC O sql fixa o campo CODCFO e vai somando os valores contidos no campo VALORLIQUIDO. Até ai tudo bem. Mas se fizer desta forma: SELECT F.CODCFO, F.NOMEFANTASIA, SUM(M.VALORLIQUIDO) AS VALOR FROM TMOV M, FCFO F WHERE F.CODCFO=M.CODCFO GROUP BY F.CODCFO ORDER BY VALOR DESC O sql fixa o campo CODCFO, vai somando os valores contidos no campo VALORLIQUIDO e faz o que com o campo NOMEFANTASIA? você não especifica no comando o que o sql deve fazer com este campo. O sql terá que retornar o campo na consulta, mas não conseguirá montar a visualização destas informações. Sendo assim, ele retorna o erro. É como se você quisesse contar as laranjas, num balde que tenha laranjas e maças. O sql apenas perguntaria: tudo bem, eu contato as laranjas, mas o que faço com as maças? Vou te mostrar uma coluna contendo laranjas, seu total, e como vou montar a coluna maça? Um exemplo simples também é você fazer um join entre 2 tabelas, onde as 2 tenham nomes de colunas iguais. Se você não referenciar a coluna de qual tabela está "falando", o sql dará erro. É a mesma coisa de perguntar: qual a coluna de qual tabela você quer? Caso não tenha entendido, posta ai q tento explicar de outra forma... :)
  2. Boa tarde Alan, Assim também dá, mas ficou faltando 1 campo na ordenação, por isso q está dando erro: SELECT M.CODCFO, F.NomeFantasia, SUM(M.ValordaNota) AS VALOR FROM TMOV M, FCFO F WHERE M.CODCFO=F.CODCFO GROUP BY M.CODCFO, F.NomeFantasia ORDER BY VALOR desc Ah, o número 3 significa que estou querendo ordernar o resultado de acordo com a terceira coluna, e não pegar as 3 primeiras linhas... :) Como não tinha colocado alias, o sql daria erro se referenciasse a coluna do SUM. Como colocou o alias VALOR, poderá referencia-la no ORDER BY pelo nome (os dois jeitos estão corretos).
  3. Boa tarde Fábio, Isto é pra faculdade? porque se for, não costumo ajudar não... rs.... mas vamos lá. 1 - Por que uma chave composta de cpf e matricula? As chaves primárias são dados que não significam nada. Quer dizer que os dados nela contidas servem apenas para um propósito: identificar uma tupla. Apenas isto. Por isso que perguntei por que da PK ser estes campos. Muitas pessoas colocam CPF, Matricula, RG, etc, como PK. Vi que a Matricula é INT. Vamos supor que a escola resolva alterar a matrícula: agora será uma letra inicial e uma sequência de números. você terá que reestruturar sua modelagem para realizar esta adaptação. Colocar estas informações como PK não é uma boa prática de modelagem. 2 - Mas caso realmente queira, o problema está associado a quantidade de colunas criadas. você tem uma chave composta na tabela Aluno. você terá que referenciar cada campo (como FK) na tabela filha. Ficaria assim (gosto de criar as tabelas e depois as cosntraints): create table aluno( cpf int not null, matricula int identity, constraint pk_id primary key (cpf, matricula), nome varchar(60) not null) create table professor( cod int primary key identity, nome varchar(100) not null, disciplina varchar(100) not null, cpf INT, matricula INT) ALTER TABLE professor WITH CHECK ADD CONSTRAINT [FK_Aluno] FOREIGN KEY(cpf, matricula) REFERENCES aluno (cpf, matricula)
  4. Bom dia Alan, O sql aceita sim a ordenação logo após o agrupamento. Segue exemplo. Faça os testes e veja se é isto mesmo que deseja: SELECT f.cod, f.NomeFantasia, SUM(m.ValordaNota) FROM MOVIMENTO m, FORNECEDOR f WHERE f.cod=f.cod GROUP BY m.cod ORDER BY 3 desc
  5. Bom dia Free, É... realmente a modelagem que não está ideal. Igual postei na "dica" acima. Mas para resolver isso, pode-se fazer os seguinte teste: - Criar indice(s) na(s) coluna(s) que estão sendo manipuladas. A principio estou vendo apenas esta forma de otimizar. Teoricamente, a demora está associada a quantidade de processo mesmo. São várias inserções em que devem ser recalculadas. A outra forma seria a remodelagem.
  6. Bom dia Free, Não entendi ao certo o que está precisando... mas vamos lá. Toda vez que é realizada uma inserção, o script é executado e a soma é refeita, ok? você queira outra forma de implementar isto? Se for, uma outra forma é armazenar sempre a ultima soma realizada. Assim não precisaria recontar o que já foi contado. Apenas pegar o valor somado e acrescentar o valor da nova inserção. O problema desta implementação é a certeza de que a soma está correta. O controle deverá ser bem implementado, para que não tenha informações errôneas. Fica a dica: - Em modelagem, não é uma boa prática você gravar dados que podem ser gerados a partir dos dados já existentes. Traduzindo (rs): se você tem vários valores, não é uma boa prática gravar a soma destes valores, pois eles podem ser calculados. Mas um ponto importante para que uma implementação desta seja aceita, seria a performance!! Pese no custo / benefício da implementação e depois avalie a melhor. Espero ter ajudado.
  7. Bom dia, Na net encontrará alguns conversores para outras extensões...
  8. rs... isso tá parecendo exercício de curso...
  9. Bom dia Camila, Caso queira o resultado em uma unica tabela, terá que fazer com um subselect. Mas aí perderá na performance e a manutenção fica um pouco mais complexa. De nada. Caso tenha alguma dúvida, pode postar!! :)
  10. Boa tarde Camila, você dá um select em vários campos: notafiscal, datadaemissao, datadachegada e totalnota. você quer agrupar pelos campos: datadachegada, total_geral. O que está errado: - você não pode agrupar por ALIAS. - você especifica como retorno os campos notafiscal e datadaemissao, que não estão no agrupamento. Ou você coloca as colunas de retorno no agrupamento, ou as retira.
  11. Boa tarde sportx, você poderá utilizar o DATEDIFF para identificar a diferença entre as datas, fazendo um agrupamento pela coluna (codigo). O resto é com vc!!! :)
  12. fulvio

    Update em massa

    Opa... é Oracle? Vou mover este tópico para o outro Forum...
  13. :) De nada... precisando estamos ai!!!
  14. Bom dia Ferretto, Este procedimento é bem usual quando se desenvolve sistemas. Sempre irá se deparar com estes processos que necessitam de implementações deste tipo. Igual ao VB6, o SQL consegue sim implementar valores default na assinatura das procedures. Basta na declaração da variável, você setar o valor default. Desta forma, não precisará alterar a sua asssinaturqa junto ao código do VB. Caso passe o valor, a procedure a utilizará. Caso não passe, ela assumirá o valor default. Segue um exemplo logo abaixo: CREATE PROC TesteProc @valor INT, @variavel INT=0 AS SELECT @valor, @variavel ------------------------------------------ EXEC testeProc 10 EXEC testeProc 10,5
  15. fulvio

    Update em massa

    Bom dia marloncos, Tem com você fazer o update em bloco sim. Basta utilizar join (igual faz no select). Ex.: UPDATE TAB1 SET valor1=t2.valor1, valor1=t2.valor1, DATA=t2.DATA FROM TAB1 t1, TAB2 t2 WHERE t1.numero=t2.numero
  16. Pô... na mão não.... rs. Segue um exemplo q como poderá fazer. Espero q ajude. -- criação de temporária CREATE TABLE #Teste (Numero INT, DATA1 DATETIME, DATA2 DATETIME) -- inserção dos dados INSERT INTO #Teste VALUES (123, '2012-04-20', '2012-04-21') INSERT INTO #Teste VALUES (123, '2012-01-13', '2012-01-18') INSERT INTO #Teste VALUES (231, '2012-03-07', '2012-03-09') INSERT INTO #Teste VALUES (321, '2011-11-19', '2011-11-18') INSERT INTO #Teste VALUES (321, '2011-01-08', '2011-01-08') -- verificação SELECT * FROM #Teste -- delete utilizado DELETE FROM #Teste WHERE numero in (SELECT DISTINCT numero FROM #Teste t) AND DATA1 IN (SELECT MIN(DATA1) FROM #Teste group BY Numero HAVING COUNT(Numero)>1 ) -- verificação SELECT * FROM #Teste
  17. Boa tarde Neto, Vou mover seu tópico para Fórum Script Brasil > Banco de Dados > Demais Bancos
  18. Bom dia Alexandre, Creio que a forma mais simples é utilizar um linked server para realizar o transporte de dados entre as bases. Outra forma mais complexa seria criar um SSIS (a partir do sql 2005) ou DTS (do sql 2000).
  19. De nada... precisando estamos ai!! Pode deixar q coloco como resolvido!
  20. Bom dia kemilly, Seja bem vinda ao Forum! Não costumo ajudar em execícios de faculadade, mas oriento... rs. A sua afirmativa "Até sei que não funciona porque o update só aceita um resultado da clausura where", está incorreta. você pode referenciar vários resultados na cláusula where. Ficaria: update estudante set serie = @serie where id in (select a1.id2 from amigo a1 where a1.id1=@id) Em relação ao processo, não olhei se daria certo. Os testes serão com vc! :)
  21. Bom dia Jonny, Cheguei a cogitar esta implementação no post acima: "Tem como fazer uma inversão entre Linha X Coluna". Concordo com você que é a correta, mas em questão de entendimento e manutenção preferiria com subselects, uma vez que é muito dificil utilizações de pivot em implementações. Fica ai uma boa sugestão!!
  22. rs... precisando estamos ai!!
×
×
  • Criar Novo...