Ir para conteúdo

POWERED BY:

Arquivado

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

Judilson

Mais de um resultado

Recommended Posts

Ha algumas maneira, como utilizar no subselect NOT IN ou IN, CASE entre outras formas.

Poderia ser mais especifico??

 

Abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por exemplo tenho a select

SELECT 
K01_001_C as cod_estru,
TECVAN.K13.K08_UKEY as ukey_rev,
tecvan.k13.ukey as ukey_estru, 
k08_001_c as rev_estru,
(SELECT ukey FROM TECVAN.K01 WHERE TECVAN.K16.K01_UKEY = TECVAN.K01.UKEY)as ukey_comp,
(SELECT ukey FROM TECVAN.K13 WHERE TECVAN.K13.K01_UKEY = (SELECT ukey FROM TECVAN.K01 WHERE TECVAN.K16.K01_UKEY = TECVAN.K01.UKEY))as ukey_estru_filha,
(SELECT K01_001_C FROM TECVAN.K01 WHERE TECVAN.K16.K01_UKEY = TECVAN.K01.UKEY) as cod_comp,
(SELECT K01_002_C FROM TECVAN.K01 WHERE TECVAN.K16.K01_UKEY = TECVAN.K01.UKEY) as desc_comp

FROM TECVAN.K13 
INNER JOIN TECVAN.K01 ON TECVAN.K01.UKEY = TECVAN.K13.K01_UKEY
INNER JOIN TECVAN.K16 ON TECVAN.K16.K13_UKEY = TECVAN.K13.UKEY
left outer join tecvan.k08 on TECVAN.K08.UKEY = TECVAN.K13.K08_UKEY
where tecvan.k01.k01_001_c = '00800747' 
AND K08_006_N = 1
ORDER BY REV_ESTRU

 

que me traz o seguite resulltado

 

cod_estru | ukey_rev  | ukey_estru |rev_estru	|ukey_comp  | ukey_estru_filha	| cod_comp | desc_comp

00406789  | 21Y0XWOI6 | 21Y0Y3LIL | 0040678R01	| 1J00TY3TK   | NULL		| 06301002 | PARAFUSO
00406789  | 21Y0XWOI6 | 21Y0Y3LIL | 0040678R01	| 1KI0MTPKK  | 1MK0SP447	| 00801102 | PCM TEC
00406789  | 21Y0XWOI6 | 21Y0Y3LIL | 0040678R01	| 1KI0OOQNJ  | 1MK0SRCI8	| 00802574 | PCM INT
00406789  | 21Y0XWOI6 | 21Y0Y3LIL | 0040678R01	| 1KI0OQKX3  | 1MH0RZ0M4	| 00802628 | PCM MOT
00406789  | 21Y0XWOI6 | 21Y0Y3LIL | 0040678R01	| 1KK0ZHXBS  | NULL		| 06300562 | PARAFUSO M3
00406789  | 21Y0XWOI6 | 21Y0Y3LIL | 0040678R01	| 1KK0ZZ0IV   | NULL		| 06301019 | PARAFUSO M2
00406789  | 21Y0XWOI6 | 21Y0Y3LIL | 0040678R01	| 1KL0HDUPK  | NULL		| 06600723 | ETIQUETA
00406789  | 21Y0XWOI6 | 21Y0Y3LIL | 0040678R01	| 1KR0IJEVI	| 1QH0TL2I4	| 08301710 | ##CABO S
00406789  | 21Y0XWOI6 | 21Y0Y3LIL | 0040678R01	| 1KR0JNHDU   | 1QI0IPXV7	| 08302786 | ## CABO G
00406789  | 21Y0XWOI6 | 21Y0Y3LIL | 0040678R01	| 1OP0W3DXV | 1OP0W9QNE	| 08600578 | KIT
00406789  | 21Y0XWOI6 | 21Y0Y3LIL | 0040678R01	| 1OP0W3VIA  | NULL		| 06601799 | ETIQUETA B
00406789  | 21Y0XWOI6 | 21Y0Y3LIL | 0040678R01	| 1OP0W4E1X  | NULL		| 06601782 | ETIQUETA G
00406789  | 21Y0XWOI6 | 21Y0Y3LIL | 0040678R01	| 1OP0W56Z7  | NULL		| 06201081 | CAIXA

 

 

na coluna ukey_estru_filha onde ela é = a NULL eu tenho uma outro produto que tem varios outros componetes, que por exemplo teriam mais 10 componentes, sera que tem como eu trazer em uma subselect isso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos lah

primeiramente, nao post novamente suas duvidas, jah havia um topico seu dias desses ( http://forum.imasters.com.br/index.php?showtopic=259355 )

Isto sobrecarrega o forum e faz com quem pode lhe ajudar se perca nas respostas.

 

Agora vamos ao seu select "degavar"

 

ao inves de utilizar inner join, use FULL JOIN ou FULL OUTER JOIN

pq? pq qdo você faz este inner

INNER JOIN TECVAN.K01 ON TECVAN.K01.UKEY = TECVAN.K13.K01_UKEY

INNER JOIN TECVAN.K16 ON TECVAN.K16.K13_UKEY = TECVAN.K13.UKEY

ele pega somente qm tem a key da tabela k01 e iguala ao campo K01_UKEY da tabela k13

o mesmo acontece na linha debaixo.

 

Outro modo de se fazer eh utilizar o NOT IN e o IN ao inves de inner join ou ateh msm where, mas vai depender pq ambos os casos perdem em performance e se você for utilizar em um relatorio (report services por exemplo) você com certeza vai ter problemas de time-out.

 

Qq coisa eh soh gritar :)

 

Abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

primeiramente peço desculpas porte colocado minha duvida novamente, mais vamos la.

 

é um seguinte se eu colocar

 

FULL JOIN TECVAN.K01 ON TECVAN.K01.UKEY = TECVAN.K13.K01_UKEY

FULL JOIN TECVAN.K16 ON TECVAN.K16.K13_UKEY = TECVAN.K13.UKEY

 

ela vai me trazer o mesmo resultado pois esses joins estao me trazendo o resulltado do produto 00800747.

 

desses joins eu descobro todos os componetes que ele tem, porem as vezes temos produtos que tem outros produtos dentro.

 

por exemplo tenho um carinho com 13 componentes porem um destes compentes e o bonequinho que esta dentro do carrinho so que este bonequinho tem 15 componetes, na select que eu fiz, eu so consego trazer os componentes do produto "pai", quando ele tem um produto "filho"eu so consigo trazer qual é o produto filho e nao consigo trazer os componetes dele, que é o caso de quando a coluna ukey_estru_filha != NULL, quando isso acontece quer dizer que estes sao os produtos com varios componentes.

 

Valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já tentou fazer com NOT IN e IN? Estou tentando entender ainda (desculpa a demora em entender, mas eh o cerebro lento depois de 16 horas de trampo direto :(

 

Acho que você vai ter q dar uma olhada em CASE e em NOT IN

 

Pelo que pude perceber, seu problema esta msm nestes joins, pq ao inves disso nao tenta com where?! eh uma hipotese. Aki no forum tem alguns exemplos, nao consigo postar mais links pq meu firefox esta dando erro toda hora, mas de uma pesquisada aki msm no forum.

 

Abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

tentei com CASE com IN, NOT IN, ANY, mais nao deu certo

 

penso eu que deveria ser alguma assim

(SELECT (SELECT K01_001_C FROM TECVAN.K13 
INNER JOIN TECVAN.K01 ON TECVAN.K01.UKEY = TECVAN.K13.K01_UKEY
INNER JOIN TECVAN.K16 ON TECVAN.K16.K13_UKEY = TECVAN.K13.UKEY)
FROM (SELECT ukey FROM TECVAN.K13 WHERE TECVAN.K13.K01_UKEY = (SELECT ukey FROM TECVAN.K01 WHERE TECVAN.K16.K01_UKEY = TECVAN.K01.UKEY))TECVAN),

Valeu

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.