
fulvio
Moderadores-
Total de itens
1.218 -
Registro em
-
Última visita
Tudo que fulvio postou
-
Query para selecionar feed de amigos em rede social
pergunta respondeu ao Rubiz Gardini de fulvio em SQL Server
Bom dia Rúbia, As suas tabelas são: DiaryPosts | ID | UserID | Content | UpdateTime | Friends | ID | UserID | FriendID | Followers | ID | UserID | FollowerID | Quais são os relacionamentos entre elas? Creio que tenha uma tabela também de usuário, onde sua chave seja o UserID. -
Bom dia ViaPocket, Um evento só poderá comportar a realização de UM curso, mas o curso poderá estar em vários eventos (relação 1 para N). Como o curso se associa ao evento, a chave do Curso deve ir para o Evento (guardar a PK do Curso no Evento). Neste caso, você terá q cadastrar o Curso. Após o cadastramento, você conseguirá associar algum Evento ao Curso. Se associar o Evento ao Aluno, você poderá ter alunos de vários Cursos no evento cadastrado. Perceba q a informação do Curso será "irrelevante" para esta correlação. Outra coisa importante: nesta correlação você terá q ter alunos para cadastrar um Evento. Isto está incorreto, pois o Evento é criado para depois os alunos serem inseridos. O que pode-se pensar também, é associar a Inscrição com o Evento também (guardar a PK da Inscrição no Evento). Desta forma, conseguirá ter inscrições não somente dos alunos das Turmas/Cursos, mas também inscrições de pessoas (que não são alunos) que possam participar dos Eventos (no caso de palestras). Ai você quem decidirá de acordo com as regras, ok? :.)
-
Para que possamos identificar os relacionamentos, temos q dar nomes mais "sugestivos" para a tabela TAB_INTERMEDIARIA.... rs. Pensei em chamá-la de ALUNO, uma vez q uma Pessoa é aluno quando se tem uma inscrição ativa. Assim ficaria: CURSO -IdCurso TURMAS -IdTurmas -IdCurso (FK) ALUNO -IdAluno (PK) -IdTurmas (FK) INSCRIÇÕES -IdInscricoes (PK) -IdAluno(FK) -IdFuncionario O modelo ficou bem parecido. Apenas acrescentei a FK na entidade Turmas, e retirei a IdCurso(FK) da tabela Aluno (que é a intermediária). você conseguirá resgatar o curso através da turma. Agora não entendi ao certo a entidade EVENTOS...
-
:.) Precisando estamos ai!!
-
(Resolvido) SOMAR VALORES DE DOIS CASES
pergunta respondeu ao Vinicius Schuh de fulvio em SQL Server
Bom dia Vinicius, Teria sim, mas ainda preferiria a temporária.... rs. você pode fazer o select e criar/inserir em uma temoprária automaticamente. Segue o script (acrescentei apenas o INTO depois dos campos do select): SELECT dbo.Funcionários.NomeDoFuncionário, Month(dbo.Orçamento.DataDoOrçamento) As Mes, NM_Mes = Case Month(dbo.Orçamento.DataDoOrçamento) When '1' Then 'JANEIRO' When '2' Then 'FEVEREIRO' When '3' Then 'MARÇO' When '4' Then 'ABRIL' When '5' Then 'MAIO' When '6' Then 'JUNHO' When '7' Then 'JULHO' When '8' Then 'AGOSTO' When '9' Then 'SETEMBRO' When '10' Then 'OUTUBRO' When '11' Then 'NOVEMBRO' When '12' Then 'DEZEMBRO' End, dbo.Orçamento.CódigoDoFuncionário, ABERTO = Case When NO_Venda Is Null Then Count(Orçamento.CódigoDoFuncionário)When NO_VENDA IS NULL THEN '0' End, FECHADO = Case When NO_Venda Is Not Null Then Count(Orçamento.CódigoDoFuncionário) When NO_VENDA IS NULL THEN '0' End, GETDATE() As DT_Imp INTO #Temporaria FROM dbo.Orçamento INNER JOIN dbo.Funcionários On dbo.Orçamento.CódigoDoFuncionário = dbo.Funcionários.CódigoDoFuncionário GROUP BY Month(dbo.Orçamento.DataDoOrçamento), dbo.Funcionários.NomeDoFuncionário, dbo.Orçamento.CódigoDoFuncionário, NO_Venda ORDER BY dbo.Funcionários.NomeDoFuncionário, Mes select * from #Temporaria -
Concatena as informações no mesmo print... mas ai você terá q converter pra caracter, porque senão o sql vai tentar somar os valores e dará erro de tipo. No exempo coloquei a hora inicial: ---rode daqui até o fim DECLARE @Codigo AS INT DECLARE @Inicio AS DATETIME DECLARE @Termino AS DATETIME SET @Codigo=0 SET @Codigo = (SELECT top 1 codigoAlocacao FROM #Tabela where codigoAlocacao>@Codigo ORDER BY codigoAlocacao) SET @Termino = (SELECT top 1 terminoAlocacao FROM #Tabela WHERE codigoAlocacao=@Codigo) WHILE 0=0 BEGIN SET @Codigo = (SELECT top 1 codigoAlocacao FROM #Tabela where codigoAlocacao>@Codigo ORDER BY codigoAlocacao) SET @Inicio = (SELECT top 1 inicioAlocacao FROM #Tabela WHERE codigoAlocacao=@Codigo) print cast (DATEDIFF (mi, @Termino, @Inicio) AS VARCHAR) + ' Horas:' + convert(varchar, @Inicio, 108) SET @Termino = (SELECT top 1 terminoAlocacao FROM #Tabela WHERE codigoAlocacao=@Codigo) IF (ISDATE(@Inicio)=0) break END Qualquer dúvida, pode postar!! :.)
-
Bom dia ViaPocket, A modelagem vai depender totalmente dos requisitos. Sempre falo q não existe uma modelagem correta. Existe a melhor que se encaixa às regras levantadas. O "armazenamento" das PK´s e FK´s não será você quem definirá onde, mas sim a modelagem. As regras são: - A PK de uma tabela migrará para a outra (filha), quando o relacionamento for 1 para N respectivamente. Esta PK será identificada como sendo uma FK na tabela filha. - Caso o relacionamento seja M para N, haverá a necessidade de se criar outra entidade, onde terá as duas PK´s (normalização). Na sua modelagem: - a relação entre Curso e Turmas é de 1 para N (a PK da tabela Curso vai para a tabela Turmas como FK). Agora vamos a sua dúvida... Regras de negócio: - Podemos ter várias inscrições para 1 curso - a PK da tabela Curso vai para a tabela Incrições como FK. - Podemos ter várias inscrições para 1 turma - a PK da tabela Turma vai para a tabela Incrições como FK. Sendo assim, a opção mais apropriada para sua dúvida seria a criação de uma tabela intermediária, sendo q esta intermediária poderá ser a própria tabela Inscrições. Mas cuidado: se sua regra de negócio for: - 1 pessoa pode fazer inscrições para vários cursos - ai terá um relacionamento de M para N - terá que criar nova entidade para realizar a normalização. No caso do relacionamento entre Estado / Cidade: - 1 Estado possui várias Cidades: a PK da tabela Estado vai para a tabela Cidade como FK. - Normalmente, há uma correlação entre Pessoa X Cidade. Desta forma, armazenar o código do Estado e da Cidade na pessoa está incorreto.
-
Boa tarde isaikki, Fiz uma implementação simples com 3 linhas, apenas para exemplificar. Caso seja isto, faça as adaptações necessárias.... -- criação de tabela temporária create table #Tabela (codigoAlocacao int, inicioAlocacao DATETIME, terminoAlocacao DATETIME) -- inserção dos dados INSERT INTO #tabela VALUES (5, '2011-12-02 08:00', '2011-12-02 09:00') INSERT INTO #tabela VALUES (8, '2011-12-02 10:50', '2011-12-02 11:00') INSERT INTO #tabela VALUES (7, '2011-12-02 09:30', '2011-12-02 10:40') ---rode daqui até o fim DECLARE @Codigo AS INT DECLARE @Inicio AS DATETIME DECLARE @Termino AS DATETIME SET @Codigo=0 SET @Codigo = (SELECT top 1 codigoAlocacao FROM #Tabela where codigoAlocacao>@Codigo ORDER BY codigoAlocacao) SET @Termino = (SELECT top 1 terminoAlocacao FROM #Tabela WHERE codigoAlocacao=@Codigo) WHILE 0=0 BEGIN SET @Codigo = (SELECT top 1 codigoAlocacao FROM #Tabela where codigoAlocacao>@Codigo ORDER BY codigoAlocacao) SET @Inicio = (SELECT top 1 inicioAlocacao FROM #Tabela WHERE codigoAlocacao=@Codigo) print DATEDIFF (mi, @Termino, @Inicio) SET @Termino = (SELECT top 1 terminoAlocacao FROM #Tabela WHERE codigoAlocacao=@Codigo) IF (ISDATE(@Inicio)=0) break END
-
Boa tarde isaikki, Utilize o Datediff entre os horários de terminoAlocacao e inicioAlocacao. Mas ao invés de pegar na mesma linha, você pegará o término da alocação da 1ª linha e fará a diferença do início da alocação da 2ª linha. Para isto, as linhas devem estar ordenadas pelo início da alocação. Ex.: inicioAlocacao | terminoAlocacao 08:00 | 09:00 09:30 | 10:40 Faça a diferença entre 09:00 e 09:30 hs.
-
Bom dia Diego, Tente pegar o MAX do count que realiza. Como o campo SD2.D2_COD está no agrupamento, creio que deva funcionar... SELECT SD2.D2_FILIAL, SD2.D2_TES, SD2.D2_COD, max(COUNT(SD2.D2_COD)) AS CONTADOR FROM SD2010 SD2 WHERE SD2.D2_EMISSAO BETWEEN '20110600' AND '20110999' AND SD2.D_E_L_E_T_ <> '*' AND SD2.D2_COD = '00385' GROUP BY SD2.D2_FILIAL, SD2.D2_TES, SD2.D2_COD
-
Bom dia Everton, você quer apenas identificar se a operação possui ou não resto? Se for somente isto, poderá utilizar o operador %. SELECT 10%3 Se retornar o valor 1, a divisão é fracionada.
-
Boa tarde Diego, Mas você quer apenas os dois maiores? Se for, desta forma abaixo deve dar. O problema é que se desejar uma quantidade X de resgistros a cada execução q realizar... SELECT top 2 SD2.D2_FILIAL, SD2.D2_TES, SD2.D2_COD, COUNT(SD2.D2_COD) AS CONTADOR FROM SD2010 SD2 WHERE SD2.D2_EMISSAO BETWEEN '20110600' AND '20110999' AND SD2.D_E_L_E_T_ <> '*' AND SD2.D2_COD = '00385' GROUP BY SD2.D2_FILIAL, SD2.D2_TES, SD2.D2_COD ORDER BY 4 desc
-
Bom dia Marc, Aletere a linha: CONSTRAINT PEPSFPTO PRIMARY KEY(DFEPSCODIGO) Para: CONSTRAINT PK_PEPSFPTO PRIMARY KEY(DFEPSCODIGO) A constraint não pode estar com o mesmo nome da tabela (igual você mesmo postou). Aqui na minha base rodou, apesar de dar erro no GRANT, pois não ter o seu usuário cadastrado em minha base. Verifique o GRANT, pois mesmo dando erro, a tabela é criada. O erro é porque a tabela já está criada em sua base. Para veirificar se já existe: SELECT * FROM sysobjects WHERE NAME LIKE 'PEPSFPTO' Se já tiver sido criada, drop e crie novamente sem o GRANT. Depois da mesma criada, execute o GRANT.
-
Dear Shap, Remove the variable reference order by @AuxTable.col by order by col. /* Order Function Returned Table * Need to minimaly change a function(GetBigTableData), so that it returns the same results but ordered. PS: Working in SQL Server 2005 */ /* Assuming that: BigTable, @ReturnTable e @AuxTable have the same schema */ create function GetBigTableData (@All bit=0) returns @ReturnTable table(col int) as begin declare @AuxTable Table(col int) /*-----UNCHANGABLE CODE--------------------------------------*/ insert into @AuxTable select * from BigTable where BigTable.col < 5 if @All=1 begin insert into @AuxTable select * from BigTable where BigTable.col >= 5 end /*----------------------------------------------------------*/ insert into @ReturnTable select * from @AuxTable order by col --Error: Must declare the scalar variable "@AuxTable". --order by @ReturnTable.col --Error: Must declare the scalar variable "@ReturnTable". return end go
-
Bom dia Rafael, você consegue sim fazer manipulações no ato da importação, mas com comandos em sql mesmo. O mais interessante seria você criar uma tabela de "transporte", onde daria a carga dos dados nela e fazria as manipulações necessárias na própria base. A performance será melhor e teria uma facilidade na correção de erros.
-
Ajuda com código - criação de constraints
pergunta respondeu ao Shinhatsubai de fulvio em SQL Server
Bom dia Shinhatsubai, você terá q criar as PK´s primeiro. Depois da criação das PK´s, você roda o script para criar as FK´s. A sintaxe quando é criada mais de uma constraint está incorreta. Ex: ALTER TABLE CLIENTES ADD CONSTRAINT PK_CLIENTES PRIMARY KEY (CODIGO_CLIENTE) ADD CONSTRAINT FK_CLIENTES FOREIGN KEY (BAIRROS_NOME_BAIRRO) REFERENCES BAIRROS; Seria: ALTER TABLE CLIENTES ADD CONSTRAINT PK_CLIENTES PRIMARY KEY (CODIGO_CLIENTE) ALTER TABLE CLIENTES ADD CONSTRAINT FK_CLIENTES FOREIGN KEY (BAIRROS_NOME_BAIRRO) REFERENCES BAIRROS; Na tabela ITEM_PEDIDO você está tentando criar 2 PK´s. -
(Resolvido) SOMAR VALORES DE DOIS CASES
pergunta respondeu ao Vinicius Schuh de fulvio em SQL Server
Boa tarde Vinicius, Apenas o case não vai funcionar mesmo. Se quisesse desta forma, teria q utilizar o bloco inteiro do select. Aí o sql ia ficar monstro... rs. (SELECT Case When NO_Venda Is Null Then Count(Orçamento.CódigoDoFuncionário) from .....) + (SELECT Case When NO_Venda Is Not Null Then Count(Orçamento.CódigoDoFuncionário) from .....) Pode fazer um "select into". Assim você já faria o select e criaria a tabela temporária para manipulação. -
(Resolvido) Problema com consulta em duas tabelas
pergunta respondeu ao dennisreis de fulvio em SQL Server
De nada,... precisando estamos ai!! :.) -
(Resolvido) SOMAR VALORES DE DOIS CASES
pergunta respondeu ao Vinicius Schuh de fulvio em SQL Server
Bom dia Vinicius, A melhor alternativa seria inserir os dados em uma temporária e fazer a manipulação que deseja. -
Bom dia Toninho, Qual o banco de dados que utilizam ai?
-
Bom dia Emso, O seu limite está relacionado com a performance, ok? Mas em que ponto deseja "atacar"? Aumento de capacidade de processamento (hardware) ou otimização das rotinas (software)? Este assunto é bem vasto... rs. A performance em BD é um trabalho contímuo e sem fim.... A princípio para otimização das rotinas (curto prazo): - Identificar as tabelas mais acessadas. - Verificar os índices (ou recriá-los caso seja necessário). - Identificar os processos mais pesados / críticos (consultas com várias tabelas relacionadas, inserções e alterações com tempo de resposta elevado). Poderá utilizar o Trace para fazer este levantamento. Cuidado que é um pouco pesado. Tente identificar horários "mais tranquilos" para análise de acessos em tabelas. Caso seja viável, rodar em horários de picos para identificar possível gargalo / concorrência (com tempo curto). - Identificado os processos críticos, analisar uma alternativa de otimização: criação ou recriação de indices, expurgo ou historiamento de dados, criação de views. Médio / longo prazo: - Verificação da modelagem do BD. - Alteração nas estruturas.
-
(Resolvido) Problema com consulta em duas tabelas
pergunta respondeu ao dennisreis de fulvio em SQL Server
Boa tarde Dennis, Das duas uma: - Não existe nenhum Municipio com os nomes pesquisados na tabela cad_clifor - Ou não existe nenhum representante (na tabela cad_repres) associado aos municípios pesquisados. -
Boa tarde Dennis, A sintaxe está incorreta, seria: where municipio in ('GUARULHOS', 'DIADEMA', 'MAUA', 'são BERNARDO DO CAMPO', 'são CAETANO DO SUL', 'RIBEIRAO PIRES')
-
Bom dia Vinicius, Mas o MSDE 2000 não é o Sql Server 2000. Se você intalar o Server 2000, não terá o Management. O mais próximo ao Managemnet será o Query Analyzer.
-
rs... mas o top 1 seria apenas para testes. O erro é por causa do retorno de mais de 1 valor no subselect. Verifique os relacionamentos entre as tabelas.