Ir para conteúdo

POWERED BY:

Arquivado

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

davisvasconcellos

[Resolvido] Unir 3 consultas em uma em uma mesma tabela

Recommended Posts

Pessoal, tenho uma dúvida que é a seguinte:

tenho 02 tabelas. PONTO e HISTÓRICO

a chamada PONTO tem as colunas ID_FUNC,DATA,TOTAL_DIA,TIPO

ID_FUNC = id do funcionário

DATA = Data do dia

TOTAL_DIA = toatal das hroas no dia ex:"08:00:00"

TIPO = 0 ou 1 (normal ou extra)

 

 

dai fiz a consulta e to inserindo na tabela de Histórico que tem os campos ID_FUNC,MES,ANO, TOTAL_GERAL,TOTAL_NORMAL,TOTAL_EXTRA

 

 

só que estou inserindo os valores só do TOTAL_GERAL pois não coloco nada na clausula where.

se eu colocar TIPO = 0 , trago todos os normais e , TIPO = 1 trago todos os extras.

 

 

tem como eu fazer uma consulta que junte as 3 consultas em uma só?

 

ficaria assim o resultado:

 

ID_FUNC | MES | ANO | TOTAL_GERAL | TOTAL_NORMAL | TOTAL_EXTRA

056 10 2009 190:00 170:00 20:00

057 10 2009 180:00 170:00 10:00

 

 

minha consulta atual:

insert into historico(id_func,total_horas,ano,mes)

(select

cod_func,

SEC_TO_TIME(SUM(TIME_TO_SEC(total_dia))) AS somames,

'2009',

'1'

from ponto

WHERE ( EXTRACT( MONTH FROM data ) = 1 ) AND ( EXTRACT( YEAR FROM

Data ) = 2009 ) and tipo='1' group by cod_func).

 

 

 

Muito Obrigado

 

Davis

Compartilhar este post


Link para o post
Compartilhar em outros sites

acho que não entendi bem, mas me parece que você vai ter que fazer uma subquery pra cada calculo de horas, uma para o normal e outra para extra, associando o id do funcionario e o periodo

Compartilhar este post


Link para o post
Compartilhar em outros sites

acho que não entendi bem, mas me parece que você vai ter que fazer uma subquery pra cada calculo de horas, uma para o normal e outra para extra, associando o id do funcionario e o periodo

 

tipo.

eu tenho uma consulta que me retorna por ex:

consulta1: func_id=10, total_tipo1=100

consulta2: func_id10, total_tipo2=50

 

eu quero jutnar as duas já que o ID é o mesmo

func_id=10, total_tipo1=100, total_tipo2=50

 

na tabela por ex eu tenho os campos

func_id,valor,tipo

10 | 100 | 1

10 | 50 | 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

entao faça 2 subquerys. exemplo:

select
nome,
(
select count(*) from tabela1 t1 where t1.idfuncionario = f.id and t1.teste = 1
) as total,
(
select count(*) from tabela1 t2 where t2.idfuncionario = f.id and t2.teste=0
) as outroValor
from
funcionario f

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valew kra. desculpa a demora. era por ae mesmo.

adaptei para o meu propósito. vou postar para quem precisar.

nesta eu estou criando uma tabela temporária e inserindo o conteúdo das subquerys nela.

(fiz isso pq esbarrei em um bug do ASP com mysql. na verdade com o ADO. http://support.microsoft.com/kb/193310/pt-br )

 

 

 

 

CREATE TEMPORARY TABLE TempTable (cod_func varchar(5), HNormal varchar(11),HExtra1 varchar(11)) TYPE=HEAP;
INSERT INTO TempTable(
select cod_func,
(select SEC_TO_TIME(SUM(TIME_TO_SEC(n.total_dia)))
from ponto n
WHERE ( EXTRACT( MONTH FROM data ) = 1 ) AND ( EXTRACT( YEAR FROM
Data ) = 2009 ) and tipo='0' and n.cod_func=p.cod_func) as HNormal,
(select SEC_TO_TIME(SUM(TIME_TO_SEC(e.total_dia)))
from ponto e
WHERE ( EXTRACT( MONTH FROM data ) = 1 ) AND ( EXTRACT( YEAR FROM
Data ) = 2009 ) and tipo='1' and e.cod_func=p.cod_func) as HExtra1
from ponto p group by cod_func
);
SELECT * FROM TempTable;
DROP TABLE TempTable; 

 

 

 

abrssss

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.