Evandro Junqueira Ramos
-
Total de itens
11 -
Registro em
-
Última visita
Posts postados por Evandro Junqueira Ramos
-
-
Você pode transformar a sub query em uma view também, pode facilitar.
Abs!
Olá novicebgJá passei por uma situação semelhante e resolvi utilizando uma sub query para agrupar os dados pela data desejada (MIN ou MAX).
Criei uma estrutura semelhante a que você descreveu...
Evandro,
Vou testar e posto o resultado.
Muito obrigado.
-
Olá novicebg
Já passei por uma situação semelhante e resolvi utilizando uma sub query para agrupar os dados pela data desejada (MIN ou MAX).
Criei uma estrutura semelhante a que você descreveu para simular a situação e gerei um script que atende a sua necessidade.
Acredito que haja uma solução melhor, mas o script abaixo pode ser um modelo para resolver o seu problema:
-- Criando tabelas para teste CREATE TABLE #endereco (id INT IDENTITY PRIMARY KEY, endereco VARCHAR(100)) CREATE TABLE #pessoa (id INT IDENTITY PRIMARY KEY, nome VARCHAR(100), dtNasc DATETIME, endereco INT FOREIGN KEY REFERENCES endereco(id)) -- Inserindo dados nas tabelas INSERT INTO #endereco VALUES ('endereco 1') INSERT INTO #endereco VALUES ('endereco 2') INSERT INTO #endereco VALUES ('endereco 3') INSERT INTO #pessoa VALUES ('Pessoa A','1986-05-01',1) INSERT INTO #pessoa VALUES ('Pessoa B','1943-12-25',2) INSERT INTO #pessoa VALUES ('Pessoa C','1960-04-21',1) INSERT INTO #pessoa VALUES ('Pessoa D','1989-01-06',1) INSERT INTO #pessoa VALUES ('Pessoa E','1988-06-17',2) -- Realizando consulta desejada SELECT P.id, P.nome, P.dtNasc, P.endereco, E.endereco FROM #pessoa P INNER JOIN (SELECT DISTINCT MIN(dtNasc) AS dtNasc, endereco FROM #pessoa GROUP BY endereco) M ON M.endereco = P.endereco AND M.dtNasc = P.dtNasc INNER JOIN #endereco E ON E.id = P.endereco -- Excluindo tabelas DROP TABLE #pessoa DROP TABLE #endereco
Abs...
-
Raphael,
Acho que você não entendeu..
O script que eu enviei precisa ser modificado de para atender às suas tabelas.... provavelmente deu erro naquele "+ ... + "
Eu coloquei uma sintaxe de exemplo, naquele script você precisaria colocar cada coluna de sua tabela convertendo ela para VARCHAR(10) e concatenando com um ";"
Se você puder passar os campos das tabelas eu posso montar o script final...
A sugestão do Marcelo também é boa, você não precisaria migrar toda a base de dados, bastaria instalar uma instancia do SQL Server 2008 com o Management Studio e utilizar o Wizard para exportar os dados.
Abraço!
Muito obrigado Marcelo, mas o excel tem um limite que só abre 1milhão de linhas! Dai não consigo abri-lo!Evandro,
Com esse comando está dando erro de "Sintaxe incorreta próxima a '+'."
Caso possa interagir pelo TeamViewer e me ajudar agradeço profundamente!
Grande Abraço!
-
Perdão Raphael,
O recurso que citei realmente não está disponível na versão Express do SQL Server 2005.
A solução do Marcelo_2 pode resolver o seu problema.
Uma outra sugestão também seria modificar a query para atender ao formato CSV, como desejado.
Não sei se é a melhor opção, mas a consulta ficaria parecida com:
SELECT CAST(dbo.coluna0.campo0 AS VARCHAR(10) + ';' + CAST(dbo.coluna0.campo1 AS VARCHAR(10)) + ';' + .... + CAST(dbo.coluna3.campoN AS VARCHAR(10)) + ';' FROM dbo.coluna0, dbo.coluna1, dbo.coluna2, dbo.coluna3
- Como eu não sabia quantas colunas cada tabela teria, utilizei campos fictícios (campo0, campo1, ... , campoN)
- Utilizei o tamanho 10 para representar o número convertido. Se necessário, você pode alterar este tamanho conforme sua necessidade
Desse modo, todos os campos do resultado foram concatenados utilizando o separador ";"
Se você utilizar o "Save result as...", deve obter o resultado esperado.
Abraço,
-
Olá Raphael!
Utilizo o SQL Server 2008 Express, mas esta dica também vale para as versões do SQL Server 2005.
O SQL Server possui Wizards para importação e exportação de dados. Além disso, um dos formatos disponíveis para exportação é justamente o formato excel (O CSV também pode ser utilizado se necessário).
Se os seus dados já estão em uma tabela no banco de dados "analise", basta acessar o SQL Server Management Studio, conectar o Object Explorer ao banco de dados e em seguida clicar com o botão direito do mouse sobre o banco de dados. No menu exibido, acesse o submenu "Tasks" e clique na opção "Export Data...".
Uma janela de wizard será exibida. Ela solicitará as informações de conexão para a fonte de dados (base de dados "analise" e para o destino, onde você poderá escolher o formato a ser utilizado). Nas opções de destino, você encontrará a opção "Microsoft Excel" e inclusive poderá escolher a versão do Excel a ser utilizada (97 / 2003 / 2007 / etc).
Caso o formato CSV seja necessário, você poderá selecionar o destino "Flat File" e informar os separadores a serem utilizados no arquivo de saída.
Você encontrará maiores informações sobre esta ferramenta nos links abaixo:
- MSDN - Using the SQL Server Import and Export Wizard to Move Data
- Database Journal - SQL Server 2005 Import / Export Wizard
Abraço!
-
Olá PLEOLP,
Fiz um exemplo simples usando uma tabela temporária #Movimento que acredito ser uma simplificação da sua tabela.
/* Criando tabela temporária para execução da consulta */ CREATE TABLE #Movimento ( idMovimento int identity (1,1) PRIMARY KEY ,nomeCliente VARCHAR(100) ,data DATETIME ) GO /* Preenchendo a tabela temporária com alguns valores para teste*/ INSERT INTO #Movimento VALUES ('Evandro', GETDATE()) GO 5 INSERT INTO #Movimento VALUES ('Carlos', GETDATE()) GO 2 INSERT INTO #Movimento VALUES ('Mariana', GETDATE()) GO 3 /* Executando a consulta */ SELECT TOP 1 nomeCliente FROM #Movimento GROUP BY nomeCliente ORDER BY COUNT(idMovimento) DESC
Repare que a consulta tem 2 pontos importantes para obter o resultado esperado:
1 - Agrupar as movimentações pelo Cliente (no seu caso, imagino que seja pelo ID ou código de cliente)
2 - Ordenar o resultado, em odem decrescente, utilizando como campo de ordenação a expressão "COUNT(idMovimento)", que retorna o número de registros que foram agrupados em cada linha do resultado.
Outra consideração: A função COUNT() aceita como parâmetro o caracter *, porém não aconselho utilizar neste caso, pois o SQL Server passará a incluir os registros cujo cliente é nulo no resultado.
Espero ter ajudado.
Abraço!
-
Olá Eduardo!
Não sei se entendi bem a sua questão, mas me parece que você gostaria de passar uma lista de valores como parâmetro da procedure para realizar a sua consulta.
Se este for o seu caso, posso te indicar este link: http://sqlserverdicas.blogspot.com/2010/12...metro-para.html.
Para seguir esta dica, será necessário trabalhar com o SQL Server 2005 ou mais recente.
Se este não é o seu caso, peço que detalhe um pouco mais.
Abraço!
-
Olá Marcelo,
Também não sei se entendi a sua pergunta, mas o próprio SQL Server oferece ferramentas para análise da performance.
Você poderia começar utilizando o Profiler, que captura todos os comandos executados em um servidor SQL Server.
Outra opção é o SQL Server Database Engine Tuning Advisor que verifica a performance dos objetos do banco, além de possuir uma ferramenta que analisa e otimiza consultas.
Além disso, você pode verificar se as boas práticas em Banco de Dados estão sendo empregadas em sua base (normalização, criação de índices, uso de SELECT sem o *, utilização de filtros corretos em consultas, etc.)
Segue os links das ferramentas que citei:
Referência do SQL Server Profiler
http://msdn.microsoft.com/pt-br/library/ms173757.aspx
Database Engine Tuning Advisor Overview:
http://technet.microsoft.com/en-us/library/ms173494.aspx
Abraço!
-
A tabela está indexada?
A consulta está retornando apenas os campos utilizados na aplicação? Ou retorna os cento e poucos campos da tabela?
O filtro da consulta está correto? Não está enviando linhas desnecessárias para a aplicação? (Isso consome recursos de rede e processamento)
-
Estou precisando ajuda para efetuar uma consulta entre duas tabelas sendo que cada uma pertence a um banco de dados diferente embora eles estejam no mesmo servidor.
Eu tentei fazer uma consulta com a estrutura a baixo, mas a resposta foi uma tabela vazia.
use bancoA
use bancoB
select nome; cpf; endereco
from bancoA.tabelaA ; bancoB.tabelaB
where bancoA.tabelaA.cpf = bancoB.tabelaB.cpf
A consulta abaixo resolve o problema:
SELECT A.nome, B.nome FROM
bancoA.dbo.tabelaA A,
bancoB.dbo.tabelaB B
where A.cpf = B.cpf
O campo cpf é do tipo VARCHAR?
Ele está sendo utilizado para unir as tabelas.
Verifique se não existe conflito entre a COLLATION dos bancos.
Excluir caracter no sql
em SQL Server
Postado · Editado por Evandro Junqueira Ramos
Pelo que eu entendi, este campo é do tipo VARCHAR, correto?
Se for, você pode utilizar a função REPLACE do SQL Server, substituindo o caractere '.' por uma string vazia.
Assim, você atualizaria o campo com o resultado desta função.
No seu caso, ficaria:
Referência do Replace:
REPLACE (Transact-SQL)
Espero ter ajudado,
Abs!