PDA

Ver la Versión Completa : Consulta complicada


superhopi
29-06-2006, 20:30:23
Hola chicos, tengo un (gran) problema con una consulta que quiero hacer.

En un programa de pedidos que he hecho, he abierto un apartado para mostrar solo los pedidos de un año en concreto (imaginense que tengo pedidos de 2004,2005 y 2006 y solo quiero mostrar los de 2006). El problema que el apartado fecha tiene el formato "xx/xx/xxxx" y no se como hacer la consulta.
En este apartado queria que aparecieran en una lista todos los años diferentes que hay en los pedidos, de forma que el usuario seleccionara el año que quiere mostrar en el programa, de forma que si el campo tuviera solo el año la consulta seria:


select distinct fecha
from pedidos


El problema empieza aqui, ya que el campo fecha es del formato que he mencionado anteriormente...
¿Alquien me puede intentar ayudar? Lo agradeceria mucho porque el programa ya lo tengo funcinando desde hace unos meses y veo que el proximo año tendre muchíiiiiisimos pedidos y va a ser costoso de mirar.

Gracias de antemano.:)

ContraVeneno
29-06-2006, 23:01:31
select distinct datepart(year, fecha)
from pedidos
order by fecha




select *
from pedidos
where datepart(year, fecha) ='2006'
order by fecha

superhopi
30-06-2006, 09:58:54
Muchas gracias, esta sentencia me viene al pelo, pero me da error:

"No se han especificado valores para algunos de los parametros requeridos"

Entonces en parameters le asigno valor date a year y se pone 0:00:00

"Llamada al procedimiento no valida"

He tenido que quitarle order by ... porque me decia que era incompatible con distinct ...

Solo quiero que muestre los distintos años de pedidos que tengo... ¿donde puede estar el error?:confused:

ContraVeneno
30-06-2006, 15:14:56
Los ejemplo que puse, funcionan perfectamente, ya los probé.

¿por qué no pones tu consulta para ver donde esta el error?

Order by no tienen ningún problema al trabajar con distinct.

Pon tu consulta y la revisamos.

superhopi
30-06-2006, 16:26:22
He estado intentando y sigue sin funcionarme.
En un form tengo un dbgrid que es donde van a aparecer los datos, en un datasource tengo el ADOquery donde aparece el codigo que tu me has escrito antes:

select distinct datepart(year, fecha)
from pedidos
order by fecha

Cuando abre el form aparecen los errores que comentaba antes.

La tabla de donde extrae los datos tiene los siguientes campos:
pedidos{num, fecha, proveedor, estado, nota} donde fecha es un campo date/time de una tabla de access

Muchas gracias :D

jjorell
30-06-2006, 18:21:59
Hola! :)

Primero que nada, vale la pena aclarar que la las siguientes sentencias funcionan perfectamente en MS SQL Server:


select distinct datepart(year, fecha)
from pedidos
order by fecha

select distinct datepart(yy, fecha)
from pedidos
order by fecha


,Pero si estas utilizando Access como dices en el último mensaje, la sentencia debería ser:


select distinct datepart("yyyy", fecha)
from pedidos


y efectivamente el Order By da conflicto con el distinct :eek: , pero yo hice una serie de pruebas y de todas formas siempre lo ordena ascendentemente. Por lo tanto la sentencia anterior es equivalente y puede servirte. ;)

NOTA: Te recomiendo que deberias tratar de usar una base de datos un poco mas potente como SQL Server, MySQL, Sybase, etc. Tiene muchas mas posibilidades al tener este tipo de requerimientos. :D

ContraVeneno
30-06-2006, 18:36:14
no habías mencionado que era en access, y como estamos en el foro de MS SQL Server pues asumí que estábamos hablando del SQL server. :eek:

superhopi
30-06-2006, 18:41:41
Lo siento, debí confundirme al clickear, la tabla es acces si... supongo que así se complican las cosas, ¿no?:(

jjorell
30-06-2006, 18:43:01
:eek: Al principio yo también lo creí, pero noté que en el ultimo mensaje puso "fecha es un campo date/time de una tabla de access".

Consejo para superhopi: Cuando quieras consultar sobre algún problema, mensiona con que estas trabajando. :D

jjorell
30-06-2006, 18:44:11
Bueno lo importanta es: Te funciono la sentencia? :confused:

superhopi
30-06-2006, 18:45:59
Vale vale, no me pegueis jo :(
Jejeje, ¿se puede cambiar de ubicacion el mensaje? Voy a intentarlo para ponerlo en su sitio :D
Ah bueno, y el problema persiste :(

:p ¡¡Socorro!!:p

jjorell
30-06-2006, 18:49:49
No te funciona esta sentencia? :confused:


select distinct datepart("yyyy", fecha)
from pedidos

superhopi
30-06-2006, 18:54:03
Gracias, si que me funciona.
Problema solucionado, ¿qué haría yo sin vosotros? :p

Os preguntaréis como no había caído yo en esta sentencia... misterios de la vida...

Otra vez gracias.:)

jjorell
30-06-2006, 19:00:05
Ok De nada. :cool:

__hector
03-07-2006, 23:38:45
Por cierto...

En SQL Server (TSQL, para ser mas especificos) existe la funcion YEAR, que dandole un parametro tipo fecha, te devuelve el a~o correspondiente. Tambien estan las funciones DAY y MONTH que retornan cada valor.

SELECT *
FROM Tabla
WHERE YEAR(campofecha) = 2006

jjorell
03-07-2006, 23:53:59
:D Es cierto, aunque en el caso de superhopi necesitaba algo como:

SELECT DISTINCT YEAR(campofecha)
FROM Tabla ORDER BY YEAR(campofecha)