Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

brunnorpm

Problemas com SQL - SQL Server

Recommended Posts

Bom dia.

Estou com um problema no seguinte comando SQL:

 

SELECT 
A.Data as Data, 
A.Numero as Num, 
A.Nome_Cliente as Destinatario, 
(SELECT TOP 1 B.Data_Devolucao FROM Tabela_1 A LEFT JOIN Tabela_2 B ON B.Comments LIKE '%mercadoria '+CONVERT(VARCHAR,A.DocNum)+'.%' ORDER BY B.Data_Devolucao DESC) as Devolucao, 
DATEADD(day,20,A.Data) as Vinte, 
DATEADD(day,30,A.Data) as Trinta, 
DATEADD(day,45,A.Data) as QuarentaeCinco, 
DATEADD(day,60,A.Data) as Sessenta 
FROM dbo.Tabela_1 A 
ORDER BY A.Data DESC

 

Tenho duas tabelas, uma de entrega de mercadoria e a outra de devolução. Nem toda mercadoria, que saiu para demonstração, foi devolvida. Por isso criei o LEFT JOIN, preciso trazer todos os dados de entrega e apenas a data da devolução quando existe a devolução. O TOP 1 está ali porque tenho alguns casos onde foram feitas duas devoluções da mesma mercadoria.

Fiz um teste, com apenas o

 

SELECT TOP 1 B.Data_Devolucao FROM Tabela_1 A LEFT JOIN Tabela_2 B ON B.Comments LIKE '%mercadoria '+CONVERT(VARCHAR,A.DocNum)+'.%' ORDER BY B.Data_Devolucao DESC

 

isolado do restante da consulta e consegui trazer os dados normalmente.

Quando uso no SQL como no exemplo acima, todas as linhas são retornadas com a data atual, no caso, "2013-07-11 00:00:000".

 

Alguém sabe porque isso acontece? Preciso tratar esse dado que vai retornar como "Devolucao"?

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia.

Estou com um problema no seguinte comando SQL:

 

SELECT 
A.Data as Data, 
A.Numero as Num, 
A.Nome_Cliente as Destinatario, 
(SELECT TOP 1 B.Data_Devolucao FROM Tabela_1 A LEFT JOIN Tabela_2 B ON B.Comments LIKE '%mercadoria '+CONVERT(VARCHAR,A.DocNum)+'.%' ORDER BY B.Data_Devolucao DESC) as Devolucao, 
DATEADD(day,20,A.Data) as Vinte, 
DATEADD(day,30,A.Data) as Trinta, 
DATEADD(day,45,A.Data) as QuarentaeCinco, 
DATEADD(day,60,A.Data) as Sessenta 
FROM dbo.Tabela_1 A 
ORDER BY A.Data DESC

 

Tenho duas tabelas, uma de entrega de mercadoria e a outra de devolução. Nem toda mercadoria, que saiu para demonstração, foi devolvida. Por isso criei o LEFT JOIN, preciso trazer todos os dados de entrega e apenas a data da devolução quando existe a devolução. O TOP 1 está ali porque tenho alguns casos onde foram feitas duas devoluções da mesma mercadoria.

Fiz um teste, com apenas o

 

SELECT TOP 1 B.Data_Devolucao FROM Tabela_1 A LEFT JOIN Tabela_2 B ON B.Comments LIKE '%mercadoria '+CONVERT(VARCHAR,A.DocNum)+'.%' ORDER BY B.Data_Devolucao DESC

 

isolado do restante da consulta e consegui trazer os dados normalmente.

Quando uso no SQL como no exemplo acima, todas as linhas são retornadas com a data atual, no caso, "2013-07-11 00:00:000".

 

Alguém sabe porque isso acontece? Preciso tratar esse dado que vai retornar como "Devolucao"?

 

Obrigado.

 

Tenta assim:

 

SELECT 
A.Data as Data, 
A.Numero as Num, 
A.Nome_Cliente as Destinatario, 
(SELECT TOP 1 B.Data_Devolucao FROM Tabela_2 B where B.Comments LIKE '%mercadoria '+CONVERT(VARCHAR(10),A.DocNum)+'.%' ORDER BY B.Data_Devolucao DESC) as Devolucao, 
DATEADD(day,20,A.Data) as Vinte, 
DATEADD(day,30,A.Data) as Trinta, 
DATEADD(day,45,A.Data) as QuarentaeCinco, 
DATEADD(day,60,A.Data) as Sessenta 
FROM dbo.Tabela_1 A 
ORDER BY A.Data DESC

 

Quando você converter para varchar é necessário passar o tamanho do campo, caso contrario ele traz o tamanho default 1.

Não é precisa fazer o left join, já que a consulta está em uma subquery.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.