[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 | \ \ _( (_ | _[EMAIL PROTECTED] _ | _) )_ (((\ \)|_/ )___( \_|(/ /))) ( \_/ / \ \_/ ) \ / \ / \_/ \_/ / / \ \ Mensagem: 18 Data: Fri, 28 Jan 2005
Res: [delphi-br] Re: Re: SQL muito complexa, unir 2 select
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
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