Ir para conteúdo
Fórum Script Brasil

Marcos Roberto Vieira Juni

Membros
  • Total de itens

    9
  • Registro em

  • Última visita

Sobre Marcos Roberto Vieira Juni

Marcos Roberto Vieira Juni's Achievements

0

Reputação

  1. Vamos la Senhor temos alguns erros nesta consulta. use Futebol update Estatisticas set TPH = ( SELECT SUM (a.PointsHome) FROM bet365 a where a.Country like 'England' and a.League like 'Premier League' and a.Season like '2018/2019' group by a.Country, a.Season, a.League, a.TeamHome) --- Este agrupamento faz com que a subquery traga diversas linhas com valores diferentes para cada agrupamento e isso não é permitido pelo sql server então arranque o group by da qui Já na parte do join eu intendi que você quer usar o operador like algo que eu não recomendo por ser muiiiiiiiiiiiiiiiiiiiiiiiiitttttttttttttto lento e nada performático mas como você liga os registros? alem do like você precisa ligar os campo com relação. CHAVE primaria com chave estrangeira, chave primaria com chave unica etc. Atenciosamente, Marcos Roberto.
  2. CREATE TABLE TABELA (ID VARCHAR(MAX)) GO INSERT INTO TABELA SELECT '20050731'; GO SELECT * FROM TABELA; GO UPDATE TABELA SET ID = CONVERT(varchar(max),FORMAT(CONVERT(int,ID),'####-##-##')) GO SELECT * FROM TABELA; Acho que essa forma é mais simples.
  3. Boa noite Colega tudo bem, Não existe mágica se tratando de SGDB'S , existe sim alguma explicação lógica. Meu conselho de uma olhada no log do SQL e veja se existe alguma rotina programada de limpeza de dados em massa ou se o modo de recuperação está como FULL e sempre que houver um checkpoint ou um backup full o log é limpo causando um variação grande no volume de dados. Atte, Marcos Roberto
  4. Buenas companheiro, Montei um exemplo abaixo espero que ajuda, não sou muito bom com PIVOT mas segue ai. DECLARE @table TABLE( Candidato INT, Idioma VARCHAR(100), Cod_idioma INT, Fluencia INT ) -- Ingles = 1, Espanhol= 2, Frances = 3 INSERT INTO @table SELECT 1,'Ingles',1,1 INSERT INTO @table SELECT 4,'Ingles',1,3 INSERT INTO @table SELECT 7,'Ingles',1,2 INSERT INTO @table SELECT 2,'Espanhol',2,3 INSERT INTO @table SELECT 5,'Espanhol',2,2 INSERT INTO @table SELECT 8,'Espanhol',2,1 INSERT INTO @table SELECT 10,'Espanhol',2,1 INSERT INTO @table SELECT 11,'Espanhol',2,3 INSERT INTO @table SELECT 3,'Frances',3,2 INSERT INTO @table SELECT 6,'Frances',3,1 INSERT INTO @table SELECT 9,'Frances',3,2 INSERT INTO @table SELECT 12,'Frances',3,2 INSERT INTO @table SELECT 13,'Frances',3,2 SELECT idioma,([1] + [2] + [3]) as TOTAL ,[1] AS 'Básico', [2] AS 'Intermediário',[3] AS 'Avançado' FROM (SELECT idioma,Cod_idioma,Fluencia FROM @table ) U PIVOT (COUNT(Cod_idioma) FOR Fluencia IN ([1],[2],[3]) ) P Abraços,
  5. SELECT ( MAX(ConsumoA) - MIN(ConsumoA) ) AS DIF_PRIMEIRO_ULTIMO_CONSUMOA, ( MAX(ConsumoB) - MIN(ConsumoB) ) AS DIF_PRIMEIRO_ULTIMO_CONSUMOB WHERE Data BETWEEN 01/10/2018 AND 03/10/2018
  6. Boa Tarde, Segue uma solução provisoria baseada nas informações que me passou, vejo se precisa adptar algo. CREATE TABLE linaus07( d01 INT, d02 INT, d03 INT, d04 INT, d05 INT, d06 INT, d07 INT ); GO INSERT INTO linaus07 SELECT 10,11,12,13,14,15,16; INSERT INTO linaus07 SELECT 10,11,12,13,14,16,17; INSERT INTO linaus07 SELECT 10,11,12,13,14,16,22; GO CREATE TABLE linrep07( d01 INT, d02 INT, d03 INT, d04 INT, d05 INT, d06 INT, d07 INT, d08 INT, d09 INT, d10 INT, d11 INT, d12 INT, d13 INT, d14 INT, d15 INT, ); GO INSERT INTO linrep07 SELECT 1,2,3,4,5,6,7,10,11,12,13,14,16,17,22; INSERT INTO linrep07 SELECT 1,2,3,4,5,6,7,8,10,11,12,13,14,16,17; INSERT INTO linrep07 SELECT 1,2,3,4,5,6,7,9,10,11,12,13,14,16,22; GO SELECT * FROM ( SELECT PK= ( CONVERT(varchar,B.d09) + ',' + CONVERT(varchar,B.d10) + ',' + CONVERT(varchar,B.d11) + ',' + CONVERT(varchar,B.d12) + ',' + CONVERT(varchar,B.d13) + ',' + CONVERT(varchar,B.d14) + ',' + CONVERT(varchar,B.d15) ) FROM linrep07 B ) J WHERE J.PK IN ( SELECT * FROM ( SELECT ( CONVERT(varchar,A.d01) + ',' + CONVERT(varchar,A.d02) + ',' + CONVERT(varchar,A.d03) + ',' + CONVERT(varchar,A.d04) + ',' + CONVERT(varchar,A.d05) + ',' + CONVERT(varchar,A.d06) + ',' + CONVERT(varchar,A.d07) ) AS PK FROM linaus07 A ) K ) Atte, Marcos Roberto
  7. Bom dia, Depende do que você quer fazer, a maneira mais simples no meu ponto de vista é trabalhar com duas tabelas, uma temporária e a outra principal onde os registros vão ficar já formatados. Faça importação para uma tabela temporária utilizando colunas nvarchar(X) ou varchar(X), utilizar o "import & export" data do SSMS ou faça um bulkinsert dependendo da quantidades de registros que tem, se a planilha for pequena pode ate usar o oldb e fazer a leitura diretamente da tabela com select e criar uma temp usando a clausula INTO. Segue exemplos abaixo: Via SQL Select Oledb : SELECT * INTO Data_dq FROM OPENDATASOURCE('Microsoft.ACE.OLEDB.12.0', 'Data Source=C:\Temp\Data.xlsx;Extended Properties=Excel 12.0')...[Sheet1$]; GO Via BULKINSERT : USE ImportFromExcel; GO BULK INSERT Data_bi FROM 'C:\Temp\data.csv' WITH ( FIELDTERMINATOR = ',', ROWTERMINATOR = '\n' ); GO Agora pode converter da forma que desejar pois já esta importado. Segue um exemplo do que se pode fazer DECLARE @Campo varchar(max) = '168H:34M:55S'; DECLARE @dia int; DECLARE @Hora int ; DECLARE @minuto int; DECLARE @segundo int; SELECT @Hora = REPLACE(REPLACE((SUBSTRING(@Campo,1,CHARINDEX(':',@Campo)-1)),'H',''),':','') ,@minuto = REPLACE(REPLACE((SUBSTRING(@Campo,CHARINDEX(':',@Campo),CHARINDEX(':',@Campo)-1)),'M',''),':','') ,@segundo = REPLACE(REPLACE((SUBSTRING(@Campo,CHARINDEX('M',@Campo),CHARINDEX(':',@Campo)-1)),'M',''),':','') SELECT @Hora SELECT @minuto SELECT @segundo Att, Marcos Roberto
  8. Bom dia, Pelo que percebi o SQL está usando um "index scan" para fazer está pesquisa o que significa que todas as linhas são lidas durante o plano de execução. Pelo que vi o predicado da sua consulta é data e um texto que você utiliza o operador like que mata a performance da maioria das consultas. O ideal é que o Índice seja seek o que significa que o plano está usando uma coluna unica ou primaria para navegar nas página e trazer o resultado. Para resolver consigo pensar em duas formas: Primeira: Habilitar o full-text do sql server e utilizar CONTAINS na pesquisa, vai melhor drasticamente a velocidade. Segunda opção: Criar uma coluna com o seu filtro da consulta e depois um index para essa coluna e utilizar a coluna nova no filtro ao invés do operador like, isso vai melhor drasticamente sua performance também. Segue exemplo abaixo: ALTER TABLE dbo.Users ADD SearchString AS CONVERT(BIT, CASE WHEN DisplayName LIKE '%Christopher%' THEN 1 ELSE 0 END) CREATE INDEX ix_yourmom ON dbo.Users (SearchString) Observações: Coisas para verificar antes de aplicar qualquer solução: Verificar se existe um index para seu predicado (todos os campos que aparecem na clausula WHERE da consulta), se existir pode verificar se o plano de execução está usando ou não. Pode tentar forças a utilização do seu index e ver se o desempenho melhore. Segue exemplo de como forçar um index no select SELECT ContactID FROM Person.Contact WITH (INDEX(AK_Contact_rowguid)) Atte., Marcos Roberto
  9. Bom dia, se as duas consultas tiverem a mesma estrutura logica é bem simples utilize da seguinte forma, SELECT C1.VendedorId [Cod Vendedor], F.ItemId [Cód.Item], A.ItemPedVndSaldo [QTD PENDENTE] FROM A UNION ALL SELECT C1.VendedorId [Cod Vendedor], F.ItemId [Cód.Item], A.ItemPedVndSaldo [QTD PENDENTE] FROM B Observações: As duas consultas devem trazer o numero de colunas iguais, pode criar uma coluna de marcação ou usar um case when para administrar isso. Att, Marcos Roberto
×
×
  • Criar Novo...