
fulvio
Moderadores-
Total de itens
1.218 -
Registro em
-
Última visita
Tudo que fulvio postou
-
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
-
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.
-
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.
-
Boa tarde Ricco, UPDATE Funcionarios SET pis=p.pis FROM Funcionarios f, Pis p WHERE f.pis=p.pis
-
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... :.)
-
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?
-
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.
-
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)
-
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.
-
Boa tarde Fells, Vou mover para o Forum de ASP.
-
(Resolvido) Query - Agrupamento e ordenação
pergunta respondeu ao Fernandinha de fulvio em SQL Server
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 -
(Resolvido) Query - Agrupamento e ordenação
pergunta respondeu ao Fernandinha de fulvio em SQL Server
Boa tarde Fernandinha, Poderá utilizar o "max" da DtEvidencia e o "group by" e "Order by" por DataAula. -
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.
-
(Resolvido) Coluna Data: Conversão de Nvarchar para Datetime ou Smalld
pergunta respondeu ao Fells de fulvio em SQL Server
Bom dia Fells, Tem como você me passar apenas as datas? Pode ser em um txt mesmo. fulvioduarte@yahoo.com.br -
(Resolvido) Coluna Data: Conversão de Nvarchar para Datetime ou Smalld
pergunta respondeu ao Fells de fulvio em SQL Server
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... -
(Resolvido) Coluna Data: Conversão de Nvarchar para Datetime ou Smalld
pergunta respondeu ao Fells de fulvio em SQL Server
Update TABELA set datax=CampoOrigem WHERE PK BETWEEN 1 AND 100 -
(Resolvido) Coluna Data: Conversão de Nvarchar para Datetime ou Smalld
pergunta respondeu ao Fells de fulvio em SQL Server
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. -
(Resolvido) Coluna Data: Conversão de Nvarchar para Datetime ou Smalld
pergunta respondeu ao Fells de fulvio em SQL Server
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.... -
Bom dia Alberto, Não tenho certeza, mas verifique no log se consegue estas informações.
-
(Resolvido) Migrar: Access p/ SQL Server - Converter campo Data
pergunta respondeu ao Fells de fulvio em SQL Server
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. -
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
-
(Resolvido) Migrar: Access p/ SQL Server - Converter campo Data
pergunta respondeu ao Fells de fulvio em SQL Server
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. -
Bom dia Gleyson, Isto é trabalho de faculdade / curso?
-
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).
-
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.