Ir para conteúdo
Fórum Script Brasil

fulvio

Moderadores
  • Total de itens

    1.218
  • Registro em

  • Última visita

Tudo que fulvio postou

  1. Bom dia Rafael, Postei um exemplo de como poderá fazer esta separação. Algumas OBS.: - Há a possibilidade de ter horas negativas se utilizar o DATEDIFF, quando a máquina ficar parada das 23:00 as 03:00 hs (por exemplo). A quantidade de horas será ok, mas terá apenas um menos na frente. - Se a máquina ficar parada por mais de 1 dia, no case você terá que implementar os dias também, porque senão irá contar apenas as horas. DECLARE @Periodo_inicial DATETIME DECLARE @Periodo_fim DATETIME SET @Periodo_inicial='2011-09-20 11:00:00.477' SET @Periodo_fim='2011-09-20 15:00:00.343' select case WHEN DATEPART(hour, @Periodo_inicial) BETWEEN 6 AND 13 AND DATEPART(minute, @Periodo_inicial) <= 59 THEN '1 turno' WHEN DATEPART(hour, @Periodo_inicial) BETWEEN 14 AND 21 AND DATEPART(minute, @Periodo_inicial) <= 59 THEN '2 turno' ELSE '3 turno' end
  2. Bom dia hrm, Creio que terá que fazer um loop mesmo pra ir decrementando o valor.... mas temos uma alternativa..... rs. você coloca o campo limite_usuario como sendo IDENTITY (1,-1). Ao inserir alguma linha, o campo será decrementado. Mas antes de começar a inserir os dados, você terá que setar o campo Identity começando com 10.000. Comando: DBCC CHECKIDENT (@TABELA, RESEED, @VALOR) Fazendo desta forma, toda vez que houver uma inserção na tabela, o campo limite_usuario terá a numeração diminuida. Esta é uma alternativa.... mas caso já tenha várias inserções na tabela e queira colocar a numeração decrescente, terá q fazer um loop mesmo updatando os valores. Quando tiver tudo ok, nas próximas inserções você poderá colocar o MAX(limite_usuario)-1. Espero que ajude.
  3. Boa tarde Leo, Não tem como declarar variáveis em uma view. O que pode fazer é criar a view e depois updatar os campos com os valores específicos.
  4. Boa tarde Ricco, UPDATE Funcionarios SET pis=p.pis FROM Funcionarios f, Pis p WHERE f.pis=p.pis
  5. Bom dia Paulo, Modelagem é bem pessoal. Para conseguir um bom modelo, é fundamental conhecer bem a demanda por parte do usuário.... O que posso ver na descrição que me passou: Entidades: - Venda - Tipo Venda - Vendedor - Local do estabelecimento (alterei a descrição para ficar mais específico...rs) - Tipo de Documento Atributos: - Data - N. Documento - Valor Total por cada Documento - Observações - nome do auditor Suas perguntas: Como faço pra ter declarações de uma mesma data e organizar isso? RESP.: a data sendo um atributo, você conseguirá organizar. Mas atenção: coloquei a entidade VENDA e o Documento seria um atributo dela. A modelagem que decidirá se cada Documento é uma VENDA específica (por isso q tem q conhecer os processos). você pode modelar uma VENDA tendo vários Documentos ou não. Ou então o Documento ao invés de ser um atributo, ser uma entidade. Além disso não entendo como fazer para que uma loja tenha vários pontos de vendas e quantidades diferentes RESP.: se o processo for assim, bem provável que o Documento passe a ser uma entidade. O Documento estará relacionando com a VENDA. Assim terá um relacionamento N para M, onde terá que realizar a normalização, podendo criar mais uma entidade de nome PONTO DE VENDA. Espero que ajude... :.)
  6. Bom dia Ricardo, Não tem q se desculpar não... rs. Ideias são sempre bem vindas!! :.) Este comando existe sim no SQL. Na segunda opção que descrevi: - Criar a coluna CODIGO não como PK, mas indexá-la e colocá-la como única. Seria a "mesma coisa" de uma PK) É exatamente isto. A difererença será criar um índice, pois o acesso será direto na coluna. Fells, os números NUMERORM e NUMEROAMOSTRA não podem se repetir, ok? Mas devem ser os dois juntos ou podem se repetir separados? Quero dizer: NUMERORM=100 , NUMEROAMOSTRA=200 NUMERORM=100 , NUMEROAMOSTRA=201 Se levar em consideração os dois números juntos eles não se repetem. Se for assim, terá que criar um indice composto único (utilizando o comando UNIQUE...rs...) Se for assim: NUMERORM=100 , NUMEROAMOSTRA=200 NUMERORM=101 , NUMEROAMOSTRA=201 Poderá criar um indice "simples" e único para cada coluna. Ok?
  7. Bom dia Fells, Entendi o problema, mas o estranho seria um código digitado pelo usuário ser sua PK. Teoricamente a PK é um controle interno, transparente ao usuário, e que não significa nada como metadados (dados sobre outros dados). Tenho algumas alternativas: - você implementa duas colunas: uma como sendo PK mesmo, e outra com o CODIGO. A coluna de controle fica sendo a PK, enquanto a coluna CODIGO fica sendo de dados que serão digitados pelo usuário. Como fazer a coluna CODIGO ser única? Toda vez antes de gravar os dados na tabela, pesquisar se aquele CODIGO existe. Se existir, mandar mensagem pro usuário. A criação de duas colunas seria interessante para performance, uma vez que o tipo do campo CODIGO é varchar... - Criar a coluna CODIGO não como PK, mas indexá-la e colocá-la como única. Seria a "mesma coisa" de uma PK.
  8. Bom dia Mayron, Seja bem vindo no Forum e na área!!! rs... Para você copiar os dados de uma tabela para outra: insert into TABELA1 select * from TABELA2 OBS.: - Como falou que queria todos os dados iguais, os campos poderão ser suprimidos da sintaxe. Mas os campos têm q estar na mesma ordem. Caso queira campos específicos: insert into TABELA1 (Campo1, Campo2) select Campo1, Campo2 from TABELA2 Caso tenha os valores e queira inserir: insert into TABELA1 values (XXXX, YYYYY)
  9. Boa tarde Bruno, O que pode tentar é utilizar o MAX com o SUM --> MAX(SUM(B.VALOR_COBRADO)) Ai sim a sintaxe identificará a maior soma. Verifique se o script está retornando os valores corretos.
  10. fulvio

    Função SQL no ASP

    Boa tarde Fells, Vou mover para o Forum de ASP.
  11. Bom dia Fernandinha, Segue exemplo: CREATE TABLE #Teste (IdTurmaPQ INT,DataAula DATETIME,Frequencia VARCHAR(20),DtCadastro DATETIME,DtEvidencia DATETIME) INSERT INTO #teste VALUES (11162,'2011-08-01 00:00:00.000','Presente','2011-09-22 00:00:00.000','2011-09-01 11:08:53.407') INSERT INTO #teste VALUES (11162,'2011-08-01 00:00:00.000','Justificada','2011-09-22 00:00:00.000','2011-09-22 10:14:02.750') INSERT INTO #teste VALUES (11162,'2011-08-02 00:00:00.000','Presente','2011-09-21 00:00:00.000','2011-08-31 16:41:26.983') INSERT INTO #teste VALUES (11162 ,'2011-08-03 00:00:00.000','Presente','2011-09-21 00:00:00.000','2011-08-31 16:42:30.983') INSERT INTO #teste VALUES (11162 ,'2011-08-04 00:00:00.000','Presente','2011-09-22 00:00:00.000','2011-08-31 16:50:39.877') INSERT INTO #teste VALUES (11162 ,'2011-08-05 00:00:00.000','Ausente','2011-09-22 00:00:00.000','2011-08-31 16:53:04.077') INSERT INTO #teste VALUES (11162 ,'2011-08-05 00:00:00.000','Justificada','2011-09-22 00:00:00.000','2011-09-22 09:54:39.267') INSERT INTO #teste VALUES (11162 ,'2011-08-08 00:00:00.000','Ausente','2011-08-31 00:00:00.000',NULL) INSERT INTO #teste VALUES (11162 ,'2011-08-09 00:00:00.000','Ausente','2011-08-31 00:00:00.000', NULL) INSERT INTO #teste VALUES (11162 ,'2011-08-10 00:00:00.000','Ausente','2011-08-31 00:00:00.000', NULL) INSERT INTO #teste VALUES (11162 ,'2011-08-11 00:00:00.000','Presente','2011-09-22 00:00:00.000','2011-08-31 20:00:08.217') INSERT INTO #teste VALUES (11162 ,'2011-08-12 00:00:00.000','Ausente','2011-08-31 00:00:00.000',NULL) INSERT INTO #teste VALUES (11162 ,'2011-08-13 00:00:00.000','Ausente','2011-09-21 00:00:00.000',NULL) INSERT INTO #teste VALUES (11162 ,'2011-08-14 00:00:00.000','Justificada','2011-09-22 00:00:00.000', NULL) INSERT INTO #teste VALUES (11162 ,'2011-08-15 00:00:00.000','Justificada','2011-09-22 00:00:00.000', NULL) SELECT DataAula, max(DtEvidencia) FROM #Teste GROUP BY DataAula ORDER BY DataAula
  12. Boa tarde Fernandinha, Poderá utilizar o "max" da DtEvidencia e o "group by" e "Order by" por DataAula.
  13. Bom dia hrm, O alias "Atual" é apenas um apelido. O sql não identifica o "Atual" como uma variável. Sendo assim, você não consegue utilizar o valor de retorno na cláucula where. O que poderá fazer é substituir o "Atual" pelo subselect toda vez que precisar utilizá-lo. O script ficará bem maior e mais dificil a manutenção, mas retornará o resultado desejado.
  14. Bom dia Fells, Tem como você me passar apenas as datas? Pode ser em um txt mesmo. fulvioduarte@yahoo.com.br
  15. A sintaxe está correta. O campo DATAX criado que tem q receber a data.... Tente forçar uma conversão: Update TABELA set datax=CAST(CampoOrigem as varchar(30)) WHERE PK BETWEEN 1 AND 100 Coloque o intervalo um pouco maior também...
  16. Update TABELA set datax=CampoOrigem WHERE PK BETWEEN 1 AND 100
  17. Tudo tranquilo... O problema é que o sql não identifica em qual campo o erro está ocorrendo. Para tentar resolver isto, você pode criar uma coluna auxiliar do tipo "datetime" na mesma tabela. Vá "updatando" em blocos os dados para a coluna criada. Em certo ponto, dará o erro. Aí você saberá em qual registro ocorreu. Para updatar em bloco, poderá pegar um campo de referência (pode ser a PK da tabela) e ir fazendo de intervalo em intervalo. Verifique não somente o formato da data, mas também os anos, meses e dias.
  18. Bom dia Fells, Verifique no sql qual o default da data em seu Banco. É bem simples (select getdate()). Os dados na coluna tem q estar neste formato. Se algum não estiver, a conversão não poderá ser realizada. Dê um order by na coluna e tente identificar alguns dados desformatados....
  19. Bom dia Alberto, Não tenho certeza, mas verifique no log se consegue estas informações.
  20. Bom dia Fells, Aproveitando o problema relatado, já tive problemas de integração entre Oracle X SQL por conta disso. Sempre é bom verificar se os dados estão íntegros!!! :.) Precisando estamos ai.
  21. Bom dia hrm, O Replicate é para você substituir caracteres. Creio que não conseguirá fazer com a funcionalidade. O tipo também terá que ser alterado para caracter, pois se alterar para numérico o zero a esquerda será suprimido. Segue um exemplo de como pode resolver: DECLARE @Numero AS INT SET @Numero = 3612 SELECT case len(CAST(@Numero AS varchar(7))) WHEN 1 THEN '000000' + CAST(@Numero AS varchar(7)) WHEN 2 THEN '00000' + CAST(@Numero AS varchar(7)) WHEN 3 THEN '0000' + CAST(@Numero AS varchar(7)) WHEN 4 THEN '000' + CAST(@Numero AS varchar(7)) WHEN 5 THEN '00' + CAST(@Numero AS varchar(7)) WHEN 6 THEN '0' + CAST(@Numero AS varchar(7)) WHEN 7 THEN CAST(@Numero AS varchar(7)) END
  22. Bom dia Fells, A coluna está como caracter e quer transformá-la para datetime? Se for isso, poderá alterar o tipo da coluna: de nvarchar para datetime (Abra o Management. Clique com o botão direito do mouse em cima do nome da tabela, escolha Modify). Altere o seu tipo. Mas atenção: se a data estiver desformatada, a alteração não será realizada. Datas no BD: - você consegue configurar qual será o default da data no banco. - O comando CONVERT você consegue alterar para vários formatos a data (dê uma olhada no help). Caso você não consiga fazer a conversão do tipo, poderá criar uma outra coluna, fazer o insert das datas no formato correto, deletar a coluna original e renomear a coluna criada.
  23. Bom dia Gleyson, Isto é trabalho de faculdade / curso?
  24. Boa tarde Bruno, Neste caso não tem como trazer o resultado utilizando apenas um select. você terá que contar os status ativos (agrupando por estado) e depois contar os status desativos (agrupando por estado). Na cláusula where não terá como separar isto. Tentei fazer utilizando o CASE, mas mesmo assim trombei com o problema na cláusula where. Se tirar o where das comparações e colocar dentro do case, é como fazer dois selects (que vai dar na mesma).
  25. Boa tarde Bruno, Quando você utiliza o COUNT, o sql realiza a contagem do campo que deseja. Quando você agrupa, o sql pega a coluna especificada e começa a realizar a contagem. Vamos supor que você tem um item na tabela. Este item possui vários status. Ao agrupar por item, o sql conta para aquele item, todos os status dele. Perceba que o agrupamento está sendo realizado por item. Caso faça o agrupamento por status, o resultado será bem diferente... Creio que o problema está sendo por causa dos dois COUNT´s. Igual falou, quando faz em selects separados dá certo. Provavelmente o sql está contando, para cada item status a mais. Sendo assim, a soma fica meio "doida". Se der, tente identificar se um item possui mais de um status. Caso prefira, poste um exemplo.
×
×
  • Criar Novo...