[delphi-br] Re: Re: SQL muito complexa, unir 2 select

2005-01-28 Por tôpico CEJUS

Group by não funciona com numeros, soh com nome dos campos
O order by que funciona com números de colunas, tu deve ter te confundido.

Sobre juntar as duas consultas lado a lado só é possível caso elas tenham
relação entre si no caso acho q o campo que poderia relacionar eh o nome da
atividade. Logo a consulta ficaria assim:

CONSULTA1 as c1
FULL JOIN (CONSULTA2) AS c2 on c1.NomeAtividade = c2.NomeAtividade

Claro q esse exemplo com uma tabela
Ou seja na tua consulta tem várias vai pondo 1 em cada 1 da consulta 1
E 2 na 2ª
Daí nos where tu especifica certinho de acordo com cada tabela
Ou seja tu junta os dois wheres tipo:

WHERE (wheres da consulta1) AND (wheres da consulta2)

Entendeu?

Se tivesse visões seria mto mais fácil hehehehe pq tu criaria 2 visoes e
depois uniria elas conforme o exemplo.

___

 Mensagem: 16
 Data: Fri, 28 Jan 2005 10:39:54 -0200
   De: [EMAIL PROTECTED] [EMAIL PROTECTED]
  Assunto: Re: SQL muito complexa, unir 2 select

Use UNION ALL entre os selects para uní-los. Só que o group by só
sera aceito no ultimo select. Se quiser, pode usar group by pelo numero da
coluna. Por exemplo, se quiser agrupar pela primeira e segunta colunas,
use:

GROUP BY 1,2


Att,

Leandro

--
Open WebMail Project (http://openwebmail.org)


-- Original Message ---
From: Hélder Rodrigues [EMAIL PROTECTED]
To: delphi-br@yahoogrupos.com.br delphi-br@yahoogrupos.com.br, delphi-
[EMAIL PROTECTED] [EMAIL PROTECTED], lista-
[EMAIL PROTECTED] [EMAIL PROTECTED]
Sent: Fri, 28 Jan 2005 10:39:18 -0200
Subject: [delphi-br] SQL muito complexa, unir 2 select

 Bom dia amigos,
 
 Estou precisando unir duas consultas SQL ... (a base de dados 
 utilizada tabelas Paradox) e não sei qual cláusula usar (não tenho 
 muito experiência no assunto ...) devo usar UNION ou JOIN ???
 
 A 1ª consulta é essa:
 --
 
 )
 GROUP BY
 (Cq_Ativ.NomeAtividade), (Cq_Ativ.IndiceOutLine),
 
 (Cq_Ativ.IndicePaterno), (Cq_insum.Descricao) , Cq_dd.CodCQ_CLASS ,
  Cq_dd.CodCQ_MOEDA , (Cq_fatpl.Periodo) ORDER BY 
 Cq_Ativ.IndiceOutLine, Cq_Ativ.IndicePaterno
 --
 ... e ela retorna 140 registros.
 
 A 2ª consulta é essa:
 --
 SELECT
 Cq_dd.CodCQ_MOEDA ,
 Cq_dd.CodCQ_CLASS ,
 (Cq_insum.Descricao)  as Insumo,
 (Cq_Ativ.NomeAtividade),
 (Cq_Ativ.IndiceOutLine),
 (Cq_Ativ.IndicePaterno),
 (sum(Cq_fatpl.QuantidadeNaoAcumulada *
 Cq_dd.QuantInsumo *
 Cq_dd.CustoUnitario)) as CustoAte
 FROM
 Cq_fatpl.DB Cq_fatpl ,
 Cq_dd.DB Cq_dd ,
 Cq_Ativ.DB Cq_Ativ,
 Cq_insum.DB Cq_insum
 WHERE
 (Cq_fatpl.CodCQ_ATIV = Cq_dd.CodCQ_ATIV)
 AND
 (Cq_fatpl.CodCQ_ATIV = Cq_Ativ.CodCQ_ATIV)
 AND
 (Cq_dd.CodCQ_INSUM = Cq_insum.CodCQ_INSUM)
 AND
 (
 (Cq_fatpl.Periodo = '10')
 AND
 (Cq_dd.CodCQ_CLASS = '7')
 )
 GROUP BY
 (Cq_Ativ.NomeAtividade),
 (Cq_Ativ.IndiceOutLine),
 (Cq_Ativ.IndicePaterno),
 (Cq_insum.Descricao) ,
 Cq_dd.CodCQ_CLASS ,
 Cq_dd.CodCQ_MOEDA
 ORDER BY
 Cq_Ativ.IndiceOutLine, Cq_Ativ.IndicePaterno
 --
 ... e ela retorna 157 registros.
 
 *
 A diferença das duas é que a 1ª pega somente os registros do 
 período 10 e a 2ª pega todos os registros até o período 10 
 incluindo o período 10 ...
 
 Tem como unir essas duas consultas ?
 Alguém pode me dar uma dica ?
 
 Desde já muito obrigado.
 
 Atenciosamente,
 
 Hélder
 
 -- 
  FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM 
 
 Para ver as mensagens antigas, acesse:
  http://br.groups.yahoo.com/group/delphi-br/messages
 
 Para falar com o moderador, envie um e-mail para:
  [EMAIL PROTECTED] ou [EMAIL PROTECTED]
 
 Links do Yahoo! Grupos
 
 
 
--- End of Original Message ---






 Mensagem: 17
 Data: Fri, 28 Jan 2005 10:54:27 -0300
   De: Eduardo Silva ® [EMAIL PROTECTED]
  Assunto: Usar a tecla ESC para sair

Galera tenho um form com 1 Page Control e dentro deste 2 TabSheet.

Estou usando o código abaixo no evento onKeyDown do form para fechar o mesmo
com a tecla ESC, mas não esta funcionando.

Alguém pode me dar uma mão ?

   if Key = 27 then
   begin
  Tabela.Cancel;
  Close;
   end;

 _  ___  _
/ )|   |( \
   / / | Eduardo de Almeida Silva  | \ \
 _( (_ |  _[EMAIL PROTECTED] _  | _) )_
(((\ \)|_/ )___( \_|(/ /)))
( \_/ / \ \_/ )
 \   /   \   /
  \_/ \_/
  /   / \   \






 Mensagem: 18
 Data: Fri, 28 Jan 2005 

Res: [delphi-br] Re: Re: SQL muito complexa, unir 2 select

2005-01-28 Por tôpico fernando

sugiro vc fazer o seguinte!!

select colunas from (
  select colunas  from bla bla bla -- 1º select
   union --se quiser trazer registros repetidos, use union all
  select colunas from blablabla
)
group by colunas. --- 2º select  

mas lembre-se de utilizar somente group by se tiver funções agregadas do
tipo count,sum,etc.

 
---Mensagem original---
 
De: delphi-br@yahoogrupos.com.br
Data: 01/28/05 12:19:17
Para: delphi-br@yahoogrupos.com.br
Assunto: [delphi-br] Re: Re: SQL muito complexa, unir 2 select
 
Group by não funciona com numeros, soh com nome dos campos
O order by que funciona com números de colunas, tu deve ter te confundido.

Sobre juntar as duas consultas lado a lado só é possível caso elas tenham
relação entre si no caso acho q o campo que poderia relacionar eh o nome da
atividade. Logo a consulta ficaria assim:

CONSULTA1 as c1
FULL JOIN (CONSULTA2) AS c2 on c1.NomeAtividade = c2.NomeAtividade

Claro q esse exemplo com uma tabela
Ou seja na tua consulta tem várias vai pondo 1 em cada 1 da consulta 1
E 2 na 2ª
Daí nos where tu especifica certinho de acordo com cada tabela
Ou seja tu junta os dois wheres tipo:

WHERE (wheres da consulta1) AND (wheres da consulta2)

Entendeu?

Se tivesse visões seria mto mais fácil hehehehe pq tu criaria 2 visoes e
depois uniria elas conforme o exemplo.

___

Mensagem: 16
 Data: Fri, 28 Jan 2005 10:39:54 -0200
   De: [EMAIL PROTECTED] [EMAIL PROTECTED]
  Assunto: Re: SQL muito complexa, unir 2 select

Use UNION ALL entre os selects para uní-los. Só que o group by só
sera aceito no ultimo select. Se quiser, pode usar group by pelo numero da
coluna. Por exemplo, se quiser agrupar pela primeira e segunta colunas,
use:

GROUP BY 1,2


Att,

Leandro

--
Open WebMail Project (http://openwebmail.org)


-- Original Message ---
From: Hélder Rodrigues [EMAIL PROTECTED]
To: delphi-br@yahoogrupos.com.br delphi-br@yahoogrupos.com.br, delphi-
[EMAIL PROTECTED] [EMAIL PROTECTED], lista-
[EMAIL PROTECTED] [EMAIL PROTECTED]
Sent: Fri, 28 Jan 2005 10:39:18 -0200
Subject: [delphi-br] SQL muito complexa, unir 2 select

 Bom dia amigos,
 
 Estou precisando unir duas consultas SQL ... (a base de dados 
 utilizada tabelas Paradox) e não sei qual cláusula usar (não tenho 
 muito experiência no assunto ...) devo usar UNION ou JOIN ???
 
 A 1ª consulta é essa:
 --
 
 )
 GROUP BY
 (Cq_Ativ.NomeAtividade), (Cq_Ativ.IndiceOutLine),
 
 (Cq_Ativ.IndicePaterno), (Cq_insum.Descricao) , Cq_dd.CodCQ_CLASS ,
  Cq_dd.CodCQ_MOEDA , (Cq_fatpl.Periodo) ORDER BY 
 Cq_Ativ.IndiceOutLine, Cq_Ativ.IndicePaterno
 --
 ... e ela retorna 140 registros.
 
 A 2ª consulta é essa:
 --
 SELECT
 Cq_dd.CodCQ_MOEDA ,
 Cq_dd.CodCQ_CLASS ,
 (Cq_insum.Descricao)  as Insumo,
 (Cq_Ativ.NomeAtividade),
 (Cq_Ativ.IndiceOutLine),
 (Cq_Ativ.IndicePaterno),
 (sum(Cq_fatpl.QuantidadeNaoAcumulada *
 Cq_dd.QuantInsumo *
 Cq_dd.CustoUnitario)) as CustoAte
 FROM
 Cq_fatpl.DB Cq_fatpl ,
 Cq_dd.DB Cq_dd ,
 Cq_Ativ.DB Cq_Ativ,
 Cq_insum.DB Cq_insum
 WHERE
 (Cq_fatpl.CodCQ_ATIV = Cq_dd.CodCQ_ATIV)
 AND
 (Cq_fatpl.CodCQ_ATIV = Cq_Ativ.CodCQ_ATIV)
 AND
 (Cq_dd.CodCQ_INSUM = Cq_insum.CodCQ_INSUM)
 AND
 (
 (Cq_fatpl.Periodo = '10')
 AND
 (Cq_dd.CodCQ_CLASS = '7')
 )
 GROUP BY
 (Cq_Ativ.NomeAtividade),
 (Cq_Ativ.IndiceOutLine),
 (Cq_Ativ.IndicePaterno),
 (Cq_insum.Descricao) ,
 Cq_dd.CodCQ_CLASS ,
 Cq_dd.CodCQ_MOEDA
 ORDER BY
 Cq_Ativ.IndiceOutLine, Cq_Ativ.IndicePaterno
 --
 ... e ela retorna 157 registros.
 
 *
 A diferença das duas é que a 1ª pega somente os registros do 
 período 10 e a 2ª pega todos os registros até o período 10 
 incluindo o período 10 ...
 
 Tem como unir essas duas consultas ?
 Alguém pode me dar uma dica ?
 
 Desde já muito obrigado.
 
 Atenciosamente,
 
 Hélder
 
 -- 
  FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM 
 
 Para ver as mensagens antigas, acesse:
  http://br.groups.yahoo.com/group/delphi-br/messages
 
 Para falar com o moderador, envie um e-mail para:
  [EMAIL PROTECTED] ou [EMAIL PROTECTED]
 
 Links do Yahoo! Grupos
 
 
 
--- End of Original Message ---






Mensagem: 17
 Data: Fri, 28 Jan 2005 10:54:27 -0300
   De: Eduardo Silva ® [EMAIL PROTECTED]
  Assunto: Usar a tecla ESC para sair

Galera tenho um form com 1 Page Control e dentro deste 2 TabSheet.

Estou usando o código abaixo no evento onKeyDown do form para fechar o mesmo
com a tecla ESC, mas não esta funcionando.

Alguém pode me dar uma mão ?

   if Key = 27 then
   begin
  Tabela.Cancel;
  Close;
   end;

 _  ___  _
/ )|   |( \
   / / | Eduardo de Almeida Silva

[delphi-br] Re: Re: SQL muito complexa, unir 2 select

2005-01-28 Por tôpico CEJUS

eh mais ou menos por ae, neste caso usei a relação:
ON Cq_Ativ1.NomeAtividade = Cq_Ativ2.NomeAtividade

No SQLserver funciona no paradox não sei mas acho q funciona beleza.
Qualquer duvida falae :P



SELECT Cq_dd1.CodCQ_MOEDA ,Cq_dd1.CodCQ_CLASS , (Cq_insum1.Descricao) as
Insumo1,
(Cq_Ativ1.NomeAtividade), (Cq_Ativ1.IndiceOutLine),
(Cq_Ativ1.IndicePaterno), 
(sum(Cq_fatpl1.QuantidadeNaoAcumulada * Cq_dd1.QuantInsumo *
Cq_dd1.CustoUnitario)) as CustoAte1,

Cq_dd2.CodCQ_MOEDA ,Cq_dd2.CodCQ_CLASS , (Cq_insum2.Descricao)
as Insumo2,
(Cq_Ativ2.NomeAtividade), (Cq_Ativ2.IndiceOutLine),
(Cq_Ativ2.IndicePaterno), 
(sum(Cq_fatpl2.QuantidadeNaoAcumulada * Cq_dd2.QuantInsumo *
Cq_dd2.CustoUnitario)) as CustoAte2

FROM Cq_fatpl.DB Cq_fatpl1 , Cq_dd.DB Cq_dd1, Cq_Ativ.DB Cq_Ativ1,
Cq_insum.DB Cq_insum1

FULL JOIN (
SELECT Cq_dd2.CodCQ_MOEDA ,Cq_dd2.CodCQ_CLASS ,
(Cq_insum2.Descricao) as Insumo2,
(Cq_Ativ2.NomeAtividade), (Cq_Ativ2.IndiceOutLine),
(Cq_Ativ2.IndicePaterno), 
(sum(Cq_fatpl2.QuantidadeNaoAcumulada * Cq_dd2.QuantInsumo *
Cq_dd2.CustoUnitario)) as CustoAte2
FROM Cq_fatpl.DB Cq_fatpl2 , Cq_dd.DB Cq_dd2, Cq_Ativ.DB
Cq_Ativ2, Cq_insum.DB Cq_insum2
) 

ON Cq_Ativ1.NomeAtividade = Cq_Ativ2.NomeAtividade

WHERE
(
(Cq_fatpl1.CodCQ_ATIV = Cq_dd1.CodCQ_ATIV) AND
(Cq_fatpl1.CodCQ_ATIV = Cq_Ativ1.CodCQ_ATIV) AND
(Cq_dd1.CodCQ_INSUM = Cq_insum1.CodCQ_INSUM) AND 
(
(Cq_fatpl1.Periodo = '10') AND (Cq_dd1.CodCQ_CLASS =
'7')
)
) AND
(
(Cq_fatpl2.CodCQ_ATIV = Cq_dd2.CodCQ_ATIV) AND
(Cq_fatpl2.CodCQ_ATIV = Cq_Ativ2.CodCQ_ATIV) AND
(Cq_dd2.CodCQ_INSUM = Cq_insum2.CodCQ_INSUM) AND 
(
(Cq_fatpl2.Periodo = '10') AND (Cq_dd2.CodCQ_CLASS =
'7')
)
)

GROUP BY (Cq_Ativ1.NomeAtividade), (Cq_Ativ2.NomeAtividade), 
 (Cq_Ativ1.IndiceOutLine), (Cq_Ativ2.IndiceOutLine),
 (Cq_Ativ1.IndicePaterno), (Cq_Ativ2.IndicePaterno), 
 (Cq_insum1.Descricao), (Cq_insum2.Descricao), 
  Cq_dd1.CodCQ_CLASS, Cq_dd2.CodCQ_CLASS, 
  Cq_dd1.CodCQ_MOEDA, Cq_dd2.CodCQ_MOEDA

ORDER BY 5, 6






ou entao



SELECT Cq_dd1.CodCQ_MOEDA ,Cq_dd1.CodCQ_CLASS , (Cq_insum1.Descricao) as
Insumo1,
(Cq_Ativ1.NomeAtividade), (Cq_Ativ1.IndiceOutLine),
(Cq_Ativ1.IndicePaterno), 
(sum(Cq_fatpl1.QuantidadeNaoAcumulada * Cq_dd1.QuantInsumo *
Cq_dd1.CustoUnitario)) as CustoAte1,

Cq_dd2.CodCQ_MOEDA ,Cq_dd2.CodCQ_CLASS , (Cq_insum2.Descricao)
as Insumo2,
(Cq_Ativ2.NomeAtividade), (Cq_Ativ2.IndiceOutLine),
(Cq_Ativ2.IndicePaterno), 
(sum(Cq_fatpl2.QuantidadeNaoAcumulada * Cq_dd2.QuantInsumo *
Cq_dd2.CustoUnitario)) as CustoAte2

FROM Cq_fatpl.DB Cq_fatpl1 , Cq_dd.DB Cq_dd1, Cq_Ativ.DB Cq_Ativ1,
Cq_insum.DB Cq_insum1
FULL JOIN (
SELECT Cq_dd2.CodCQ_MOEDA ,Cq_dd2.CodCQ_CLASS ,
(Cq_insum2.Descricao) as Insumo2,
(Cq_Ativ2.NomeAtividade), (Cq_Ativ2.IndiceOutLine),
(Cq_Ativ2.IndicePaterno), 
(sum(Cq_fatpl2.QuantidadeNaoAcumulada * Cq_dd2.QuantInsumo *
Cq_dd2.CustoUnitario)) as CustoAte2
FROM Cq_fatpl.DB Cq_fatpl2 , Cq_dd.DB Cq_dd2, Cq_Ativ.DB
Cq_Ativ2, Cq_insum.DB Cq_insum2

WHERE (
(Cq_fatpl2.CodCQ_ATIV = Cq_dd2.CodCQ_ATIV) AND
(Cq_fatpl2.CodCQ_ATIV = Cq_Ativ2.CodCQ_ATIV) AND
(Cq_dd2.CodCQ_INSUM = Cq_insum2.CodCQ_INSUM) AND 
(
(Cq_fatpl2.Periodo = '10') AND
(Cq_dd2.CodCQ_CLASS = '7')
)
)

GROUP BY (Cq_Ativ2.NomeAtividade), (Cq_Ativ2.IndiceOutLine),
(Cq_Ativ2.IndicePaterno),
 (Cq_insum2.Descricao), Cq_dd2.CodCQ_CLASS,
Cq_dd2.CodCQ_MOEDA)

ON Cq_Ativ1.NomeAtividade = Cq_Ativ2.NomeAtividade

WHERE
(
(Cq_fatpl1.CodCQ_ATIV = Cq_dd1.CodCQ_ATIV) AND
(Cq_fatpl1.CodCQ_ATIV = Cq_Ativ1.CodCQ_ATIV) AND
(Cq_dd1.CodCQ_INSUM = Cq_insum1.CodCQ_INSUM) AND 
(
(Cq_fatpl1.Periodo = '10') AND (Cq_dd1.CodCQ_CLASS =
'7')
)
)

GROUP BY (Cq_Ativ1.NomeAtividade), (Cq_Ativ1.IndiceOutLine),
(Cq_Ativ1.IndicePaterno), 
 (Cq_insum1.Descricao), Cq_dd1.CodCQ_CLASS, Cq_dd1.CodCQ_MOEDA

ORDER BY 5, 6

-Mensagem original-
De: CEJUS [mailto:[EMAIL PROTECTED] 
Enviada em: sexta-feira, 28 de janeiro de 2005 12:21
Para: 'delphi-br@yahoogrupos.com.br'
Assunto: Re: Re: SQL muito complexa, unir 2 select
Prioridade: Alta

Group by não funciona com numeros, soh com nome dos campos
O order by que funciona com números de colunas, tu deve ter te confundido.

Sobre juntar as duas consultas lado a lado só é possível caso elas tenham
relação entre si no caso acho q o campo que poderia relacionar eh o nome da
atividade. Logo a consulta ficaria assim:

CONSULTA1 as c1
FULL JOIN (CONSULTA2) AS c2 on c1.NomeAtividade = c2.NomeAtividade

Claro q esse exemplo com uma tabela