Ir para conteúdo

POWERED BY:

Arquivado

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

Ric_calheiros

Select aninhado

Recommended Posts

select case A.Usuario_criacao

When 'A16'

then 'NAIARA'

When 'A17'

then 'ANCIOTO'

When 'A19'

then 'MELISSA'

When 'A20'

then 'FLAVIA'

When 'A21'

then 'SILVIA' END as Vendedor,

case a.cd_representant

When '050001'

then 'ANDREA - REG. LONDRINA'

When '050014'

then 'REG. UMUARAMA'

When '050004'

then 'JULIANO - REG. MARINGÁ'

When '050006'

then 'REG. PONTA GROSSA'

When '050005'

then 'GUSTAVO - REG. FRANC.BELTRÃO'

When '050008'

then 'REG. FOZ DO IGUAÇU'

When '050002'

then 'ELISANGELA - REG. CASCAVEL'

When '050003'

then 'RONALDO - REG. NORTE VELHO'

When '050013'

then 'REG. GUARAPUAVA' END as Nome_representante,

SUM(C.Quantidade*C.Pr_unitario) AS total_item,

case d.cd_tg

When '99'

then SUM(c.quantidade*d.conversor)

Else '0' end As Litragem,

(select c.quantidade

from FAPEDIDO A

join GEEMPRES B on b.Cd_empresa = a.Cd_cliente

join FAITEMPE C on A.Cd_pedido = c.Cd_pedido

left join ESMXTG d on c.Cd_material = d.Cd_material

where a.Dt_pedido between '20110701' and '20110731'

and a.Campo96 <> ''

and a.Controle > '38'

and a.Total_pedido <> '0'

and c.Cd_especie = 'R'

and c.cd_material not in (select d.cd_material

from ESMXTG d

where d.Cd_tg = '99')) as Pecas,

a.Cd_pedido, a.projeto as Pre_datado, a.Campo96 as Televendas,

case a.Controle

When '39'

then 'Em andamento'

When '40'

then 'Em andamento'

When '41'

then 'Liberado p/ Faturamento'

When '91'

then 'Reprovado por crédito'

When '50'

then 'Faturado' END as Classificacao,

a.Dt_pedido, a.Cd_cliente, c.Cd_material, d.cd_tg

 

from FAPEDIDO A

join GEEMPRES B on b.Cd_empresa = a.Cd_cliente

join FAITEMPE C on A.Cd_pedido = c.Cd_pedido

left JOIN ESMXTG D on d.Cd_material = c.Cd_material

where a.Dt_pedido between '20110701' and '20110731'

and a.Campo96 <> ''

and a.Controle > '38'

and a.Total_pedido <> '0'

and c.Cd_especie = 'R'

group by a.usuario_criacao, a.cd_representant, a.Cd_pedido, a.projeto,

a.Campo96, a.Controle, a.Dt_pedido, a.Cd_cliente,c.Cd_material,d.Cd_tg, c.quantidade

 

order by 1,2,7

 

O código em destaque quando rodado sozinho em script exclusivo funciona porêm quando jogo aqui dentro apresenta o seguinte erro:

Mensagem 512, Nível 16, Estado 1, Linha 1

Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

Warning: Null value is eliminated by an aggregate or other SET operation.

 

O que eu preciso é que a coluna Pecas apresente c.quantidade somente para os c.cd_material não inscritos na tabela ESMXTG

 

Alguém poderia esclarecer...

Compartilhar este post


Link para o post
Compartilhar em outros sites

aqui tem um caso parecido: http://forum.imasters.com.br/topic/186054-erro-estranho-subquery-returned-more-than-1-value/

 

outra sugestão seria fazer um sum no campo c.quantidade

 

O que eu preciso é que a coluna Pecas apresente c.quantidade somente para os c.cd_material não inscritos na tabela ESMXTG

sobre isso verifique os comandos NOT IN ou EXCEPT

http://blog.sqlauthority.com/2007/05/22/sql-server-2005-comparison-except-operator-vs-not-in/

Compartilhar este post


Link para o post
Compartilhar em outros sites

aqui tem um caso parecido: http://forum.imasters.com.br/topic/186054-erro-estranho-subquery-returned-more-than-1-value/

 

outra sugestão seria fazer um sum no campo c.quantidade

 

O que eu preciso é que a coluna Pecas apresente c.quantidade somente para os c.cd_material não inscritos na tabela ESMXTG

sobre isso verifique os comandos NOT IN ou EXCEPT

http://blog.sqlauthority.com/2007/05/22/sql-server-2005-comparison-except-operator-vs-not-in/

 

Apliquei as sugestões do amigo envia_br porém da mesma forma, o select roda isoladamente, mas quando aplicado dentro de estrutura apresentada dá o mesmo erro. A questão é o seguinte o resultado de:

select c.quantidade
from FAPEDIDO A
join GEEMPRES B on b.Cd_empresa = a.Cd_cliente
join FAITEMPE C on A.Cd_pedido = c.Cd_pedido
left join ESMXTG d on c.Cd_material = d.Cd_material
where a.Dt_pedido between '20110701' and '20110731'
and a.Campo96 <> '' 
and a.Controle > '38'
and a.Total_pedido <> '0'
and c.Cd_especie = 'R'
and c.cd_material not in (select d.cd_material
                         from ESMXTG d
                         where d.Cd_tg = '99')                 =      159 linhas

Isolando este select acima o restante do código traz 809 linhas, acredito que o problema ocorre em razão do banco não saber com o que preencher as demais linhas (809 - 159 = 650), como se faltasse uma instrução para preencher com NULL ou com ZERO...se alguém puder aguardo sugestões...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Realmente ric_calheiros, o mais provavel é que o banco de dados não tem nenhuma instrução pra preencher as linhas restantes.

Consegui isso com o suporte da inter.net onde hospedo meus sites. Espero ter ajudado.

 

Existe uma tabela com 78 campos, porém alguns campos aceitam valores NULOS.

Necessário montar uma query onde retorne apenas a quantidade de registro que

possua todos os campos preenchidos, porém o mesmo não deseja colocar as cláusulas

na mão pois são várias.

Ex.:

Campo1 IS NOT NULL

AND Campo2 IS NOT NULL

AND Campo3 IS NOT NULL

...

AND Campo78 IS NOT NULL

Compartilhar este post


Link para o post
Compartilhar em outros sites

ric_calheiros - Não entendi o subselect em questão força que não existam os "cd_material" da sub-query, querendo trazer todos não faça o sub.

 

Marcao Silva - Creio que isto deveria ser outro tópico, não sei de nenhuma solução que teste TODOS OS campos, na uma query dinamica que lesse o dicionário de metadados poderia ser montadada dinamicamente.

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.