consulta

15/04/2005 - 11:17 por Joan Q. | Informe spam
Hola a todos/as

Una vez más abuso de vuestra amabilidad y disposición por una consulta que
se me antojaba relativamente fácil pero en la que he quedado atascado.
Joan Q

Dada la sentencia:

declare @a datetime
declare @z datetime
set @a = '20050101'
set @z = '20050131'

select t.nombre
,convert(char(12), p.f_paga, 105) as data

from trabajadores t

inner join pagastrabajador p
on t.codigoempresa = p.codigoempresa
and t.cod_trabajador = p.cod_trabajador
and p.t_paga = 1
and (p.f_paga between @a and @z)
and p.cod_centro in (1,5,7,8,13,15,16)

where t.codigoempresa = 716
and p.f_paga between @a and @z
and t.clavepercepcion <> 'g'
and ((datename (month, t.f_baja ) <> datename(month, @z)) or (t.f_baja is
null))

order by t.nombre

_____________________________
Resultado:

- Pepito 15-01-2005
- Pepito 31-01-2005
- Juan 23-01-2005
- José 30-01-2005
- José 31-01-2005
________________________________

Lo que quiero es que me regrese el trabajador con la fecha de una paga, en
caso de que haya más de una con la de fecha más reciente.

Preguntas similare

Leer las respuestas

#1 Keyhelp
15/04/2005 - 11:17 | Informe spam
Prueba lo siguiente:
declare @a datetime
declare @z datetime
set @a = '20050101'
set @z = '20050131'

select t.nombre
,Max(convert(char(12), p.f_paga, 105)) as data
from trabajadores t
inner join pagastrabajador p
on t.codigoempresa = p.codigoempresa
and t.cod_trabajador = p.cod_trabajador
and p.t_paga = 1
and (p.f_paga between @a and @z)
and p.cod_centro in (1,5,7,8,13,15,16)
where t.codigoempresa = 716
and p.f_paga between @a and @z
and t.clavepercepcion <> 'g'
and ((datename (month, t.f_baja ) <> datename(month, @z)) or (t.f_baja is
null))

order by t.nombre
group by t.nombre

"Joan Q." escribió en el mensaje
news:
Hola a todos/as

Una vez más abuso de vuestra amabilidad y disposición por una consulta que
se me antojaba relativamente fácil pero en la que he quedado atascado.
Joan Q

Dada la sentencia:

declare @a datetime
declare @z datetime
set @a = '20050101'
set @z = '20050131'

select t.nombre
,convert(char(12), p.f_paga, 105) as data

from trabajadores t

inner join pagastrabajador p
on t.codigoempresa = p.codigoempresa
and t.cod_trabajador = p.cod_trabajador
and p.t_paga = 1
and (p.f_paga between @a and @z)
and p.cod_centro in (1,5,7,8,13,15,16)

where t.codigoempresa = 716
and p.f_paga between @a and @z
and t.clavepercepcion <> 'g'
and ((datename (month, t.f_baja ) <> datename(month, @z)) or (t.f_baja is
null))

order by t.nombre

_____________________________
Resultado:

- Pepito 15-01-2005
- Pepito 31-01-2005
- Juan 23-01-2005
- José 30-01-2005
- José 31-01-2005
________________________________

Lo que quiero es que me regrese el trabajador con la fecha de una paga, en
caso de que haya más de una con la de fecha más reciente.



Respuesta Responder a este mensaje
#2 Joan Q.
15/04/2005 - 12:00 | Informe spam
Gracias por contestar.
Me sale excatamente lo mismo: varias pagas de un mismo trabajador.
Joan Q
"Keyhelp" escribió en el mensaje
news:
Prueba lo siguiente:
declare @a datetime
declare @z datetime
set @a = '20050101'
set @z = '20050131'

select t.nombre
,Max(convert(char(12), p.f_paga, 105)) as data
from trabajadores t
inner join pagastrabajador p
on t.codigoempresa = p.codigoempresa
and t.cod_trabajador = p.cod_trabajador
and p.t_paga = 1
and (p.f_paga between @a and @z)
and p.cod_centro in (1,5,7,8,13,15,16)
where t.codigoempresa = 716
and p.f_paga between @a and @z
and t.clavepercepcion <> 'g'
and ((datename (month, t.f_baja ) <> datename(month, @z)) or (t.f_baja is
null))

order by t.nombre
group by t.nombre

"Joan Q." escribió en el mensaje
news:
> Hola a todos/as
>
> Una vez más abuso de vuestra amabilidad y disposición por una consulta


que
> se me antojaba relativamente fácil pero en la que he quedado atascado.
> Joan Q
>
> Dada la sentencia:
>
> declare @a datetime
> declare @z datetime
> set @a = '20050101'
> set @z = '20050131'
>
> select t.nombre
> ,convert(char(12), p.f_paga, 105) as data
>
> from trabajadores t
>
> inner join pagastrabajador p
> on t.codigoempresa = p.codigoempresa
> and t.cod_trabajador = p.cod_trabajador
> and p.t_paga = 1
> and (p.f_paga between @a and @z)
> and p.cod_centro in (1,5,7,8,13,15,16)
>
> where t.codigoempresa = 716
> and p.f_paga between @a and @z
> and t.clavepercepcion <> 'g'
> and ((datename (month, t.f_baja ) <> datename(month, @z)) or (t.f_baja


is
> null))
>
> order by t.nombre
>
> _____________________________
> Resultado:
>
> - Pepito 15-01-2005
> - Pepito 31-01-2005
> - Juan 23-01-2005
> - José 30-01-2005
> - José 31-01-2005
> ________________________________
>
> Lo que quiero es que me regrese el trabajador con la fecha de una paga,


en
> caso de que haya más de una con la de fecha más reciente.
>
>
>


Respuesta Responder a este mensaje
#3 Salvador Ramos
15/04/2005 - 12:46 | Informe spam
Hola:

No es posible, si lleva la función MAX y group by que te salga más de una
fila con el mismo nombre de trabajador. Revisa que es así.

Un saludo
Salvador Ramos
Murcia - España
[Microsoft MVP SQL Server]
www.helpdna.net (información sobre SQL server, Windows DNA y .NET)

"Joan Q." escribió en el mensaje
news:
Gracias por contestar.
Me sale excatamente lo mismo: varias pagas de un mismo trabajador.
Joan Q
"Keyhelp" escribió en el mensaje
news:
Prueba lo siguiente:
declare @a datetime
declare @z datetime
set @a = '20050101'
set @z = '20050131'

select t.nombre
,Max(convert(char(12), p.f_paga, 105)) as data
from trabajadores t
inner join pagastrabajador p
on t.codigoempresa = p.codigoempresa
and t.cod_trabajador = p.cod_trabajador
and p.t_paga = 1
and (p.f_paga between @a and @z)
and p.cod_centro in (1,5,7,8,13,15,16)
where t.codigoempresa = 716
and p.f_paga between @a and @z
and t.clavepercepcion <> 'g'
and ((datename (month, t.f_baja ) <> datename(month, @z)) or (t.f_baja is
null))

order by t.nombre
group by t.nombre

"Joan Q." escribió en el mensaje
news:
> Hola a todos/as
>
> Una vez más abuso de vuestra amabilidad y disposición por una consulta


que
> se me antojaba relativamente fácil pero en la que he quedado atascado.
> Joan Q
>
> Dada la sentencia:
>
> declare @a datetime
> declare @z datetime
> set @a = '20050101'
> set @z = '20050131'
>
> select t.nombre
> ,convert(char(12), p.f_paga, 105) as data
>
> from trabajadores t
>
> inner join pagastrabajador p
> on t.codigoempresa = p.codigoempresa
> and t.cod_trabajador = p.cod_trabajador
> and p.t_paga = 1
> and (p.f_paga between @a and @z)
> and p.cod_centro in (1,5,7,8,13,15,16)
>
> where t.codigoempresa = 716
> and p.f_paga between @a and @z
> and t.clavepercepcion <> 'g'
> and ((datename (month, t.f_baja ) <> datename(month, @z)) or (t.f_baja


is
> null))
>
> order by t.nombre
>
> _____________________________
> Resultado:
>
> - Pepito 15-01-2005
> - Pepito 31-01-2005
> - Juan 23-01-2005
> - José 30-01-2005
> - José 31-01-2005
> ________________________________
>
> Lo que quiero es que me regrese el trabajador con la fecha de una paga,


en
> caso de que haya más de una con la de fecha más reciente.
>
>
>






Respuesta Responder a este mensaje
#4 Joan Q.
15/04/2005 - 13:05 | Informe spam
Bueno la verdad es que yo tampoco entiendo donde está el error.

Voy a delimitar a un solo trabajador y te paso literalmente el select:

declare @a datetime
declare @z datetime
set @a = '20050101'
set @z = '20050131'

select
t.nombre, max(convert(char(12), p.f_paga, 105) )as data

from trabajadores t

inner join pagastrabajador p
on t.codigoempresa = p.codigoempresa
and t.cod_trabajador = p.cod_trabajador
and p.t_paga = 1
and (p.f_paga between @a and @z)
and p.cod_centro in (1,5,7,8,13,15,16)

where t.codigoempresa = 716
and t.cod_trabajador = 125
and p.f_paga between @a and @z
and t.clavepercepcion <> 'g'
and ((datename (month, t.f_baja ) <> datename(month, @z)) or (t.f_baja is
null))

group by t.nombre, p.f_paga
order by t.nombre
_________________

Resultado (sólo cambio el nombre del trabajador por lo de datos personales):


nombre data
-
MORRISON, STEPHAN 02-01-2005
MORRISON, STEPHAN 31-01-2005

(2 filas afectadas)





"Salvador Ramos" escribió en el
mensaje news:
Hola:

No es posible, si lleva la función MAX y group by que te salga más de una
fila con el mismo nombre de trabajador. Revisa que es así.

Un saludo
Salvador Ramos
Murcia - España
[Microsoft MVP SQL Server]
www.helpdna.net (información sobre SQL server, Windows DNA y .NET)

"Joan Q." escribió en el mensaje
news:
> Gracias por contestar.
> Me sale excatamente lo mismo: varias pagas de un mismo trabajador.
> Joan Q
> "Keyhelp" escribió en el mensaje
> news:
>> Prueba lo siguiente:
>> declare @a datetime
>> declare @z datetime
>> set @a = '20050101'
>> set @z = '20050131'
>>
>> select t.nombre
>> ,Max(convert(char(12), p.f_paga, 105)) as data
>> from trabajadores t
>> inner join pagastrabajador p
>> on t.codigoempresa = p.codigoempresa
>> and t.cod_trabajador = p.cod_trabajador
>> and p.t_paga = 1
>> and (p.f_paga between @a and @z)
>> and p.cod_centro in (1,5,7,8,13,15,16)
>> where t.codigoempresa = 716
>> and p.f_paga between @a and @z
>> and t.clavepercepcion <> 'g'
>> and ((datename (month, t.f_baja ) <> datename(month, @z)) or (t.f_baja


is
>> null))
>>
>> order by t.nombre
>> group by t.nombre
>>
>> "Joan Q." escribió en el mensaje
>> news:
>> > Hola a todos/as
>> >
>> > Una vez más abuso de vuestra amabilidad y disposición por una


consulta
> que
>> > se me antojaba relativamente fácil pero en la que he quedado


atascado.
>> > Joan Q
>> >
>> > Dada la sentencia:
>> >
>> > declare @a datetime
>> > declare @z datetime
>> > set @a = '20050101'
>> > set @z = '20050131'
>> >
>> > select t.nombre
>> > ,convert(char(12), p.f_paga, 105) as data
>> >
>> > from trabajadores t
>> >
>> > inner join pagastrabajador p
>> > on t.codigoempresa = p.codigoempresa
>> > and t.cod_trabajador = p.cod_trabajador
>> > and p.t_paga = 1
>> > and (p.f_paga between @a and @z)
>> > and p.cod_centro in (1,5,7,8,13,15,16)
>> >
>> > where t.codigoempresa = 716
>> > and p.f_paga between @a and @z
>> > and t.clavepercepcion <> 'g'
>> > and ((datename (month, t.f_baja ) <> datename(month, @z)) or


(t.f_baja
> is
>> > null))
>> >
>> > order by t.nombre
>> >
>> > _____________________________
>> > Resultado:
>> >
>> > - Pepito 15-01-2005
>> > - Pepito 31-01-2005
>> > - Juan 23-01-2005
>> > - José 30-01-2005
>> > - José 31-01-2005
>> > ________________________________
>> >
>> > Lo que quiero es que me regrese el trabajador con la fecha de una


paga,
> en
>> > caso de que haya más de una con la de fecha más reciente.
>> >
>> >
>> >
>>
>>
>
>


Respuesta Responder a este mensaje
#5 Alejandro Mesa
15/04/2005 - 14:19 | Informe spam
Joan,

No debes agrupar por t.nombre y p.f_paga, sino solo por t.nombre.

group by t.nombre, p.f_paga



...
group by t.nombre
...


AMB

"Joan Q." wrote:

Bueno la verdad es que yo tampoco entiendo donde está el error.

Voy a delimitar a un solo trabajador y te paso literalmente el select:

declare @a datetime
declare @z datetime
set @a = '20050101'
set @z = '20050131'

select
t.nombre, max(convert(char(12), p.f_paga, 105) )as data

from trabajadores t

inner join pagastrabajador p
on t.codigoempresa = p.codigoempresa
and t.cod_trabajador = p.cod_trabajador
and p.t_paga = 1
and (p.f_paga between @a and @z)
and p.cod_centro in (1,5,7,8,13,15,16)

where t.codigoempresa = 716
and t.cod_trabajador = 125
and p.f_paga between @a and @z
and t.clavepercepcion <> 'g'
and ((datename (month, t.f_baja ) <> datename(month, @z)) or (t.f_baja is
null))

group by t.nombre, p.f_paga
order by t.nombre
_________________

Resultado (sólo cambio el nombre del trabajador por lo de datos personales):


nombre data
-
MORRISON, STEPHAN 02-01-2005
MORRISON, STEPHAN 31-01-2005

(2 filas afectadas)





"Salvador Ramos" escribió en el
mensaje news:
> Hola:
>
> No es posible, si lleva la función MAX y group by que te salga más de una
> fila con el mismo nombre de trabajador. Revisa que es así.
>
> Un saludo
> Salvador Ramos
> Murcia - España
> [Microsoft MVP SQL Server]
> www.helpdna.net (información sobre SQL server, Windows DNA y .NET)
>
> "Joan Q." escribió en el mensaje
> news:
> > Gracias por contestar.
> > Me sale excatamente lo mismo: varias pagas de un mismo trabajador.
> > Joan Q
> > "Keyhelp" escribió en el mensaje
> > news:
> >> Prueba lo siguiente:
> >> declare @a datetime
> >> declare @z datetime
> >> set @a = '20050101'
> >> set @z = '20050131'
> >>
> >> select t.nombre
> >> ,Max(convert(char(12), p.f_paga, 105)) as data
> >> from trabajadores t
> >> inner join pagastrabajador p
> >> on t.codigoempresa = p.codigoempresa
> >> and t.cod_trabajador = p.cod_trabajador
> >> and p.t_paga = 1
> >> and (p.f_paga between @a and @z)
> >> and p.cod_centro in (1,5,7,8,13,15,16)
> >> where t.codigoempresa = 716
> >> and p.f_paga between @a and @z
> >> and t.clavepercepcion <> 'g'
> >> and ((datename (month, t.f_baja ) <> datename(month, @z)) or (t.f_baja
is
> >> null))
> >>
> >> order by t.nombre
> >> group by t.nombre
> >>
> >> "Joan Q." escribió en el mensaje
> >> news:
> >> > Hola a todos/as
> >> >
> >> > Una vez más abuso de vuestra amabilidad y disposición por una
consulta
> > que
> >> > se me antojaba relativamente fácil pero en la que he quedado
atascado.
> >> > Joan Q
> >> >
> >> > Dada la sentencia:
> >> >
> >> > declare @a datetime
> >> > declare @z datetime
> >> > set @a = '20050101'
> >> > set @z = '20050131'
> >> >
> >> > select t.nombre
> >> > ,convert(char(12), p.f_paga, 105) as data
> >> >
> >> > from trabajadores t
> >> >
> >> > inner join pagastrabajador p
> >> > on t.codigoempresa = p.codigoempresa
> >> > and t.cod_trabajador = p.cod_trabajador
> >> > and p.t_paga = 1
> >> > and (p.f_paga between @a and @z)
> >> > and p.cod_centro in (1,5,7,8,13,15,16)
> >> >
> >> > where t.codigoempresa = 716
> >> > and p.f_paga between @a and @z
> >> > and t.clavepercepcion <> 'g'
> >> > and ((datename (month, t.f_baja ) <> datename(month, @z)) or
(t.f_baja
> > is
> >> > null))
> >> >
> >> > order by t.nombre
> >> >
> >> > _____________________________
> >> > Resultado:
> >> >
> >> > - Pepito 15-01-2005
> >> > - Pepito 31-01-2005
> >> > - Juan 23-01-2005
> >> > - José 30-01-2005
> >> > - José 31-01-2005
> >> > ________________________________
> >> >
> >> > Lo que quiero es que me regrese el trabajador con la fecha de una
paga,
> > en
> >> > caso de que haya más de una con la de fecha más reciente.
> >> >
> >> >
> >> >
> >>
> >>
> >
> >
>
>



Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida