Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MS SQL Server
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-06-2006
Avatar de superhopi
superhopi superhopi is offline
Miembro
 
Registrado: may 2003
Ubicación: Valencia
Posts: 128
Poder: 21
superhopi Va por buen camino
Smile 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.
__________________
Si me ves durmiendo no me despiertes, podría estar soñando que soy libre.
Responder Con Cita
  #2  
Antiguo 29-06-2006
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
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
__________________


Última edición por ContraVeneno fecha: 29-06-2006 a las 23:03:39.
Responder Con Cita
  #3  
Antiguo 30-06-2006
Avatar de superhopi
superhopi superhopi is offline
Miembro
 
Registrado: may 2003
Ubicación: Valencia
Posts: 128
Poder: 21
superhopi Va por buen camino
Lightbulb 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?
__________________
Si me ves durmiendo no me despiertes, podría estar soñando que soy libre.
Responder Con Cita
  #4  
Antiguo 30-06-2006
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
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.
__________________

Responder Con Cita
  #5  
Antiguo 30-06-2006
Avatar de superhopi
superhopi superhopi is offline
Miembro
 
Registrado: may 2003
Ubicación: Valencia
Posts: 128
Poder: 21
superhopi Va por buen camino
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
__________________
Si me ves durmiendo no me despiertes, podría estar soñando que soy libre.
Responder Con Cita
  #6  
Antiguo 30-06-2006
Avatar de jjorell
jjorell jjorell is offline
Miembro
 
Registrado: jun 2006
Posts: 22
Poder: 0
jjorell Va por buen camino
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 , 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.
Responder Con Cita
  #7  
Antiguo 30-06-2006
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
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.
__________________

Responder Con Cita
  #8  
Antiguo 30-06-2006
Avatar de superhopi
superhopi superhopi is offline
Miembro
 
Registrado: may 2003
Ubicación: Valencia
Posts: 128
Poder: 21
superhopi Va por buen camino
¿qué hago yo aquí?

Lo siento, debí confundirme al clickear, la tabla es acces si... supongo que así se complican las cosas, ¿no?
__________________
Si me ves durmiendo no me despiertes, podría estar soñando que soy libre.
Responder Con Cita
  #9  
Antiguo 30-06-2006
Avatar de jjorell
jjorell jjorell is offline
Miembro
 
Registrado: jun 2006
Posts: 22
Poder: 0
jjorell Va por buen camino
Thumbs up

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.
Responder Con Cita
  #10  
Antiguo 30-06-2006
Avatar de jjorell
jjorell jjorell is offline
Miembro
 
Registrado: jun 2006
Posts: 22
Poder: 0
jjorell Va por buen camino
Lightbulb

Bueno lo importanta es: Te funciono la sentencia?
Responder Con Cita
  #11  
Antiguo 30-06-2006
Avatar de superhopi
superhopi superhopi is offline
Miembro
 
Registrado: may 2003
Ubicación: Valencia
Posts: 128
Poder: 21
superhopi Va por buen camino
Ains ^_^U

Vale vale, no me pegueis jo
Jejeje, ¿se puede cambiar de ubicacion el mensaje? Voy a intentarlo para ponerlo en su sitio
Ah bueno, y el problema persiste

¡¡Socorro!!
__________________
Si me ves durmiendo no me despiertes, podría estar soñando que soy libre.
Responder Con Cita
  #12  
Antiguo 30-06-2006
Avatar de jjorell
jjorell jjorell is offline
Miembro
 
Registrado: jun 2006
Posts: 22
Poder: 0
jjorell Va por buen camino
No te funciona esta sentencia?

Código SQL [-]
 
select distinct datepart("yyyy", fecha)
from pedidos
Responder Con Cita
  #13  
Antiguo 30-06-2006
Avatar de superhopi
superhopi superhopi is offline
Miembro
 
Registrado: may 2003
Ubicación: Valencia
Posts: 128
Poder: 21
superhopi Va por buen camino
mmmmm... olé

Gracias, si que me funciona.
Problema solucionado, ¿qué haría yo sin vosotros?

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

Otra vez gracias.
__________________
Si me ves durmiendo no me despiertes, podría estar soñando que soy libre.
Responder Con Cita
  #14  
Antiguo 30-06-2006
Avatar de jjorell
jjorell jjorell is offline
Miembro
 
Registrado: jun 2006
Posts: 22
Poder: 0
jjorell Va por buen camino
Thumbs up

Ok De nada.
Responder Con Cita
  #15  
Antiguo 03-07-2006
Avatar de __hector
[__hector] __hector is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Santo Domingo, Rep. Dom.
Posts: 1.075
Poder: 22
__hector Va por buen camino
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
__________________
Héctor Geraldino
Software Engineer
Responder Con Cita
  #16  
Antiguo 03-07-2006
Avatar de jjorell
jjorell jjorell is offline
Miembro
 
Registrado: jun 2006
Posts: 22
Poder: 0
jjorell Va por buen camino
Wink

Es cierto, aunque en el caso de superhopi necesitaba algo como:

SELECT DISTINCT YEAR(campofecha)
FROM Tabla ORDER BY YEAR(campofecha)
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Consulta Complicada tcp_ip_es SQL 2 09-06-2006 16:05:30
Consulta complicada Luciano M. SQL 6 01-12-2005 19:30:15
Consulta complicada cval SQL 4 21-09-2005 18:04:27
Consulta Complicada NickName SQL 6 29-04-2004 07:33:31
Complicada consulta mosorio SQL 3 12-08-2003 20:12:00


La franja horaria es GMT +2. Ahora son las 08:52:43.


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
Copyright 1996-2007 Club Delphi