Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MS SQL Server (https://www.clubdelphi.com/foros/forumdisplay.php?f=23)
-   -   Consulta complicada (https://www.clubdelphi.com/foros/showthread.php?t=33209)

superhopi 29-06-2006 20:30:23

Consulta complicada
 
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:

Código SQL [-]
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

Código SQL [-]
select distinct datepart(year, fecha)
from pedidos
order by fecha


Código SQL [-]
select *
from pedidos
where datepart(year, fecha) ='2006'
order by fecha

superhopi 30-06-2006 09:58:54

Llamada al proc. no valida
 
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

Mira esto:
 
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:

Código SQL [-]
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:

Código SQL [-]
 
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:

Código SQL [-]
 
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

¿qué hago yo aquí?
 
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

Ains ^_^U
 
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:

Código SQL [-]
 
select distinct datepart("yyyy", fecha)
from pedidos

superhopi 30-06-2006 18:54:03

mmmmm... olé
 
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)


La franja horaria es GMT +2. Ahora son las 10:04:50.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi