Te contesto entre lineas 2016-03-31 14:27 GMT-06:00 Linder Poclaba Lazaro <linder...@gmail.com>:
> Buenas tardes lista, intento armar una planillas de asistencia mensual de > personas teniendo una tabla de marcaciones del personal hice una función en > plpgsql para obtener la asistencia, pero no he podido añadir los días > sábados y domingos en la planilla la funcion es la siguiente: > > CREATE OR REPLACE FUNCTION controlasistencia.asistenciamesfuncionario(vmes > integer, vgestion integer, vidbiometrico integer) > RETURNS SETOF record AS > $BODY$ > DECLARE > fila RECORD; marcaciones RECORD; diatexto text; dia integer; fechasabado > date; fechadomingo date; > hora time;finde boolean; > BEGIN > FOR marcaciones in > select * from crosstab('SELECT > biofechahora::date,nivel,to_char(biofechahora, ''HH12:MI:SS'')::time FROM > controlasistencia.biometrico where mes='||vmes||' and anio='||vgestion||' > and codigobiometrico='||vidbiometrico, > 'select 1 union select 2 union select 3 union select 4 union > select 5 union select 6 union select 7 union > select 8 union select 9 union select 10 union select 11 union > select 12 order by 1') as (fecha date,d1 time,d2 time,d3 time,d4 time,d5 > time, > d6 time,d7 time,d8 time,d9 time,d10 time,d11 time,d12 time) > LOOP > SELECT date_part('dow',marcaciones.fecha) into dia; > SELECT CASE WHEN date_part('dow',marcaciones.fecha) = 0 THEN > 'Domingo' > WHEN date_part('dow',marcaciones.fecha) = 1 THEN 'Lunes' > WHEN date_part('dow',marcaciones.fecha) = 2 THEN 'Martes' > WHEN date_part('dow',marcaciones.fecha) = 3 THEN 'Miercoles' > WHEN date_part('dow',marcaciones.fecha) = 4 THEN 'Jueves' > WHEN date_part('dow',marcaciones.fecha) = 5 THEN 'Viernes' > WHEN date_part('dow',marcaciones.fecha) = 6 THEN 'Sabado' END INTO > diatexto; > este tipo de lineas "WHEN date_part('dow',marcaciones.fecha) = 6" deberia ser "when dia=6" usando tu lógica IF dia=5 THEN > select marcaciones.fecha + 1 into fechasabado; > select marcaciones.fecha + 2 into fechadomingo; > select > diatexto,marcaciones.fecha,marcaciones.d1,marcaciones.d2,marcaciones.d3,marcaciones.d4, > > marcaciones.d5,marcaciones.d6,marcaciones.d7,marcaciones.d8,marcaciones.d9,marcaciones.d10, > marcaciones.d11,marcaciones.d12 UNION ALL > select > 'Sábado'::text,fechasabado,hora,hora,hora,hora,hora,hora,hora,hora,hora,hora,hora,hora > UNION ALL > select > 'Domingo'::text,fechadomingo,hora,hora,hora,hora,hora,hora,hora,hora,hora,hora,hora,hora > INTO fila; > raise notice '% fila',fila; > aqui tienes un raise notice, ¿en el log de postgres te aparece? ELSE > SELECT > diatexto,marcaciones.fecha,marcaciones.d1,marcaciones.d2,marcaciones.d3,marcaciones.d4, > > marcaciones.d5,marcaciones.d6,marcaciones.d7,marcaciones.d8,marcaciones.d9,marcaciones.d10, > marcaciones.d11,marcaciones.d12 INTO fila; > END IF; > return next fila; > END LOOP; > RETURN; > END;$BODY$ > LANGUAGE plpgsql VOLATILE > > En la función identifico el día viernes para poder unir con union all los > dias sábados y domingos pero al hacer correr no me funciona > Por curiosidad ¿Para que quieres sabados y domingos si no tienes el campo marcaciones? > Lo que la función obtiene es esto: > > "Lunes";"2016-02-01";"08:26:00";"12:31:00";"02:35:00";"06:34:00";"";"" > "Martes";"2016-02-02";"08:35:00";"12:32:00";"02:33:00";"07:03:00";"";"" > "Miercoles";"2016-02-03";"08:32:00";"12:32:00";"02:33:00";"06:40:00";"";"" > "Jueves";"2016-02-04";"08:38:00";"12:32:00";"02:32:00";"06:45:00";"";"" > "Viernes";"2016-02-05";"08:00:00";"11:32:00";"12:24:00";"05:27:00";"";"" > "Miercoles";"2016-02-10";"08:42:00";"01:18:00";"01:52:00";"07:09:00";"";"" > "Jueves";"2016-02-11";"08:37:00";"12:35:00";"02:34:00";"06:39:00";"";"" > > "Viernes";"2016-02-12";"08:32:00";"12:42:00";"02:33:00";"03:47:00";"05:08:00";"06:49:00" > "Lunes";"2016-02-15";"08:34:00";"12:33:00";"02:33:00";"06:49:00";"";"" > > "Martes";"2016-02-16";"08:40:00";"08:40:00";"12:35:00";"02:34:00";"06:35:00";"" > "Miercoles";"2016-02-17";"08:38:00";"01:00:00";"02:24:00";"06:37:00";"";"" > "Jueves";"2016-02-18";"08:32:00";"12:31:00";"02:34:00";"06:33:00";"";"" > "Viernes";"2016-02-19";"08:34:00";"12:33:00";"02:34:00";"06:37:00";"";"" > "Lunes";"2016-02-22";"08:36:00";"12:31:00";"02:32:00";"06:43:00";"";"" > "Martes";"2016-02-23";"08:35:00";"11:31:00";"02:32:00";"06:50:00";"";"" > "Miercoles";"2016-02-24";"08:33:00";"12:32:00";"02:33:00";"06:55:00";"";"" > "Jueves";"2016-02-25";"08:34:00";"12:34:00";"02:32:00";"06:32:00";"";"" > "Viernes";"2016-02-26";"08:38:00";"12:31:00";"02:34:00";"06:36:00";"";"" > "Lunes";"2016-02-29";"08:39:00";"12:31:00";"02:35:00";"06:34:00";"";"" > > Desde ya gracias por su tiempo y cualquier consejo es bien recibido. > > -- ________________________________________ Lo bueno de vivir un dia mas es saber que nos queda un dia menos de vida