SQL SERVER - JOIN COM IS NOT NULL
Pessoal, Como Resolvo essa equação.
No Campo VendasCab eu armazeno [Ô]E[Ô], [Ô]S[Ô] e NULL
e quero pegar somente os campos que não contiverem NULL em VendasCab.TipoMovimento
SELECT P.CodBarra, P.CodEmpresa, P.Nome AS Produto, P.Venda AS Valor, M.Nome AS Marca, F.Nome AS Familia, SUM(vDet.Qtd) AS Estoque
FROM dbo.VendasDet AS vDet INNER JOIN
dbo.VendasCab AS VC ON vDet.CodigoCab = VC.Codigo RIGHT OUTER JOIN
dbo.Produtos AS P INNER JOIN
dbo.ProdutosMarcas AS M ON P.CodMarca = M.Codigo INNER JOIN
dbo.ProdutosFamilia AS F ON P.CodFamilia = F.Codigo ON vDet.CodigoProduto = P.Codigo
WHERE (vDet.Cancelado IS NULL) AND (P.Nome LIKE [ô]%O%[ô]) AND (VC.TipoMovimento IS NOT NULL)
GROUP BY P.Codigo, P.CodBarra, P.CodEmpresa, P.Nome, P.Venda, M.Nome, F.Nome
ORDER BY Produto
No Campo VendasCab eu armazeno [Ô]E[Ô], [Ô]S[Ô] e NULL
e quero pegar somente os campos que não contiverem NULL em VendasCab.TipoMovimento
SELECT P.CodBarra, P.CodEmpresa, P.Nome AS Produto, P.Venda AS Valor, M.Nome AS Marca, F.Nome AS Familia, SUM(vDet.Qtd) AS Estoque
FROM dbo.VendasDet AS vDet INNER JOIN
dbo.VendasCab AS VC ON vDet.CodigoCab = VC.Codigo RIGHT OUTER JOIN
dbo.Produtos AS P INNER JOIN
dbo.ProdutosMarcas AS M ON P.CodMarca = M.Codigo INNER JOIN
dbo.ProdutosFamilia AS F ON P.CodFamilia = F.Codigo ON vDet.CodigoProduto = P.Codigo
WHERE (vDet.Cancelado IS NULL) AND (P.Nome LIKE [ô]%O%[ô]) AND (VC.TipoMovimento IS NOT NULL)
GROUP BY P.Codigo, P.CodBarra, P.CodEmpresa, P.Nome, P.Venda, M.Nome, F.Nome
ORDER BY Produto
será que esse [Ô]RIGHT OUTER JOIN[Ô] tem algo haver
Alias u nem conheço [Ô]RIGHT OUTER JOIN[Ô], conheço [Ô]RIGHT JOIN[Ô]
Vê se a imagem te ajuda
Alias u nem conheço [Ô]RIGHT OUTER JOIN[Ô], conheço [Ô]RIGHT JOIN[Ô]
Vê se a imagem te ajuda
O Problema está na seguinte situação, se eu remover vendasCab da consulta, eu consigo trazer o NULL que vem do SUM(campo)
Mas quando coloco ela, já tem esse criterio adicionacional ( TipoMovimento IS NOT NULL ), ai não consigo trazer a linha.
Mas quando coloco ela, já tem esse criterio adicionacional ( TipoMovimento IS NOT NULL ), ai não consigo trazer a linha.
Resolvi usando uma POG, mas vou deixar em aberto, caso alguém me ajude com a solução correta kkkkk
SELECT P.Codigo, P.CodBarra, P.CodEmpresa, P.Nome AS Produto, P.Venda AS Valor, M.Nome AS Marca, F.Nome AS Familia, ISNULL(SUM(vDet.Qtd), 0) AS Estoque, MAX(VC.Codigo) AS POG
FROM dbo.VendasDet AS vDet LEFT OUTER JOIN
dbo.VendasCab AS VC ON vDet.Codigo = VC.Codigo RIGHT OUTER JOIN
dbo.Produtos AS P INNER JOIN
dbo.ProdutosMarcas AS M ON P.CodMarca = M.Codigo INNER JOIN
dbo.ProdutosFamilia AS F ON P.CodFamilia = F.Codigo ON vDet.CodigoProduto = P.Codigo
WHERE (vDet.Cancelado IS NULL)
GROUP BY P.Codigo, P.CodBarra, P.CodEmpresa, P.Nome, P.Venda, M.Nome, F.Nome
ORDER BY Produto
SELECT P.Codigo, P.CodBarra, P.CodEmpresa, P.Nome AS Produto, P.Venda AS Valor, M.Nome AS Marca, F.Nome AS Familia, ISNULL(SUM(vDet.Qtd), 0) AS Estoque, MAX(VC.Codigo) AS POG
FROM dbo.VendasDet AS vDet LEFT OUTER JOIN
dbo.VendasCab AS VC ON vDet.Codigo = VC.Codigo RIGHT OUTER JOIN
dbo.Produtos AS P INNER JOIN
dbo.ProdutosMarcas AS M ON P.CodMarca = M.Codigo INNER JOIN
dbo.ProdutosFamilia AS F ON P.CodFamilia = F.Codigo ON vDet.CodigoProduto = P.Codigo
WHERE (vDet.Cancelado IS NULL)
GROUP BY P.Codigo, P.CodBarra, P.CodEmpresa, P.Nome, P.Venda, M.Nome, F.Nome
ORDER BY Produto
Não daria para fazer uma segunda query (delete) para tirar os NULL?
já estava assim. mas a performance é um lixo.
Não se ajuda. Mas inverta o NOT da expressão:
por
(VC.TipoMovimento IS NOT NULL)
por
(NOT (VC.TipoMovimento IS NULL))
Faz um banco igual no access, depois crie uma consulta em modo design. Quando estiver pronto peça pra mostrar o SQL
FFCOUTO, não funfou não
SELECT P.Nome, SUM(vDet.Qtd) AS Qtd
FROM VendasCab AS VC INNER JOIN
VendasDet AS vDet ON VC.Codigo = vDet.CodigoCab RIGHT JOIN
Produtos AS P ON vDet.CodigoProduto = P.Codigo
WHERE (NOT (VC.TipoMovimento IS NULL))
GROUP BY P.Nome.
SELECT P.Nome, SUM(vDet.Qtd) AS Qtd
FROM VendasCab AS VC INNER JOIN
VendasDet AS vDet ON VC.Codigo = vDet.CodigoCab RIGHT JOIN
Produtos AS P ON vDet.CodigoProduto = P.Codigo
WHERE (NOT (VC.TipoMovimento IS NULL))
GROUP BY P.Nome.
Citação::
Faz um banco igual no access, depois crie uma consulta em modo design. Quando estiver pronto peça pra mostrar o SQL
NO SQL Server também tem isso.
A consulta era cruzando duas views, mas o desempenho online não ficou muito bom.
Citação:No Campo VendasCab eu armazeno [Ô]E[Ô], [Ô]S[Ô] e NULL
Bom. Se você só armazena esses três valores basta você usar o operador IN para buscar os valores com [Ô]E[Ô] e [Ô]S[Ô].
Assim:
(VC.TipoMovimento IN ([ô]E[ô], [ô]S[ô]))
Acredito que vá resolver seu problema.
Tópico encerrado , respostas não são mais permitidas