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 Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-06-2005
lgarcia lgarcia is offline
Miembro
 
Registrado: jul 2004
Posts: 479
Poder: 20
lgarcia Va por buen camino
Problemas con consulta SQL

Hola y gracias por su colaboracion

Tengo un problema con una consulta y es relativo a 2 fechas que se obtienen de diferentes BD y que sus valores no son iguales y yo quiero obtener en una linea las dos fechas. El codigo es el siguiente:

CREATE PROCEDURE DatosDepositos
@tiendasala int,
@tienda int,
@fecha1 datetime,
@fecha2 datetime
AS
CREATE TABLE #temporal
(
numero char(10),
declarado money,
fechadeclarado datetime,
contado money,
fechacontado datetime
)
INSERT INTO #temporal
SELECT numero, total_contado, fecha, 0, ''
FROM Sala.dbo.Bolsos
WHERE fecha between @fecha1 and @fecha2 and usuario = @tiendasala
UNION ALL
SELECT numero, 0, '', importe, fecha
FROM dbo.Depositos
WHERE fecha between @fecha1 and @fecha2 and tienda = @tienda
SELECT numero, SUM(declarado) as declarado, fechadeclarado, SUM(contado) as contado, fechacontado
FROM #temporal
GROUP BY numero, fechadeclarado, fechacontado
GO

Cuando hago el group by me salen 2 lineas por cada numero. Existe alguna forma de darle tratamiento a las fechas para obviarlas del Group By.

Trabajo con D7, ADO y MSSQL 2000.

Gracias por su atencion

Saludos
Luis Garcia

_____________________________
La mejor manera de decir es hacer
Responder Con Cita
  #2  
Antiguo 03-06-2005
Avatar de __hector
[__hector] __hector is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Santo Domingo, Rep. Dom.
Posts: 1.075
Poder: 23
__hector Va por buen camino
convierte las fechas a tipo varchar, y dale un group by

te funcionaria un:

convert(varchar, fecha, 101)
__________________
Héctor Geraldino
Software Engineer
Responder Con Cita
  #3  
Antiguo 03-06-2005
lgarcia lgarcia is offline
Miembro
 
Registrado: jul 2004
Posts: 479
Poder: 20
lgarcia Va por buen camino
Problemas con consulta SQL

Gracias por la respuesta, el problema radica en que al no ser las fechas iguales cuando le aplique el Group By me va a dar 2 lineas para un mismo numero con las 2 fechas.

Gracias
Luis Garcia

_____________________________
La mejor manera de decir es hacer
Responder Con Cita
  #4  
Antiguo 03-06-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
no incluyas las fechas.. solo el número:

Código SQL [-]
Select numero, count(*)
  from #temporal
 group by numero

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #5  
Antiguo 03-06-2005
lgarcia lgarcia is offline
Miembro
 
Registrado: jul 2004
Posts: 479
Poder: 20
lgarcia Va por buen camino
Problemas con consulta SQL

El problema es que tengo que poner las fechas para poder comparar la fecha de entrada de un deposito con la fecha de su conteo.

Muchas gracias por la respuesta seguiremos investigando.

Luis Garcia

_____________________________
La mejor manera de decir es hacer
Responder Con Cita
  #6  
Antiguo 04-06-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Y cual de las fechas tenes que poner, si las son distintas
__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #7  
Antiguo 04-06-2005
Avatar de Xianto
Xianto Xianto is offline
Miembro
 
Registrado: oct 2004
Ubicación: Nací en Neuquén (ARG), desde 2001 Spain
Posts: 151
Poder: 20
Xianto Va por buen camino
2 cosas...

1) Nunca hagas un union, porque segun mi experiencia con SQL, si bien las tablas necesitan ser iguales, la consulta puede producir resultados distintos, asi que siempre mejor usar tablas temporales... donde en ambas guardas los datos que necesitas y luego por medio de un select puedes sacar los datos que necesitas...

2) Has probado meter ambos resultados en tablas temporales y sacarlos con un SELECT DISTINCT ???? eso creo, seria tu solucion.

Con el tema de las tablas temporales tienes 2 opciones:

CREATE @tabla TABLE (campos)
CREATE TABLE #tabla (campos)

La diferencia, es el tipo de tabla temporal, si bien las 2 son temporales, la que se crea con #tabla si bien es temporal a su vez es fisica, lo que significa que el server la crea como un objeto temporal por lo cual hasta que no termina la consulta la tabla existe... La otra @tabla es solo de memoria, asi que por propia experiencia te sugiero que solo utilices @tabla cuando no pases los 4000 registros, ya que si lo haces y varias consultas son ejecutadas al mismo tiempo el equipo se pone "tonto" y un simple "select * from tabla where 1=0" puede tardar 5 minutos, eso es porque MSSQL fragmenta mucho la memoria en este tipo de tabla....

Saludetes !
__________________
El diseño dira si tiene futuro...
Responder Con Cita
  #8  
Antiguo 06-06-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Cool

Hola Xianto.

Con respecto de:
Cita:
Empezado por Xianto
1) Nunca hagas un union, porque segun mi experiencia con SQL, si bien las tablas necesitan ser iguales, la consulta puede producir resultados distintos
No entiendo bien que significa para vos que la consulta pueda producir "resultados distintos".

¿distintos a que?

En mi experiencia, las uniones son sumamemte útiles y constituyen una fortaleza de SQL, y atacarlas de este modo, sin dar mayores argumentos no me parece buena idea.

Quizas estemos hablando de cosas distintas, asi que te agradeceré argumentar tu aseveración.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #9  
Antiguo 08-06-2005
lgarcia lgarcia is offline
Miembro
 
Registrado: jul 2004
Posts: 479
Poder: 20
lgarcia Va por buen camino
Problemas con consulta SQL

Muchas gracias por sus respuestas y por el interesante debate al final resolvi el problema haciendo un select relacionando las tablas de 2 BD diferentes aprovechando el campo comun a ambas,ahi les muestro el codigo para que el que tenga un problema parecido le pueda dar solucion:
CREATE PROCEDURE DatosDepositos
@tienda int,
@fecha1 datetime,
@fecha2 datetime
AS
SELECT Sala.dbo.Bolsos.numero, CONVERT(VARCHAR(10), Depositos.fecha, 103) as fechadeposito,
CONVERT(VARCHAR(10), Sala.dbo.Bolsos.fecha_conteo, 103) as fechaconteo,
Tienda.dbo.Depositos.importe as declarado, Sala.dbo.Detalles.gravamen as contado
FROM Sala.dbo.Bolsos INNER JOIN
Sala.dbo.Bolso_Detalles ON Sala.dbo.Bolsos.id = Sala.dbo.Bolso_Detalles.idbolso INNER JOIN
Sala.dbo.Detalles ON Sala.dbo.Bolso_Detalles.iddetalles = Sala.dbo.Detalles.id INNER JOIN
Tienda.dbo.Depositos ON Sala.dbo.Bolsos.numero = Tienda.dbo.Depositos.numero
WHERE tienda = @tienda and Tienda.dbo.Depositos.fecha between @fecha1 and @fecha2
GO

Saludos
Luis Garcia

_____________________________
La mejor manera de decir es hacer
Responder Con Cita
  #10  
Antiguo 09-06-2005
Avatar de Xianto
Xianto Xianto is offline
Miembro
 
Registrado: oct 2004
Ubicación: Nací en Neuquén (ARG), desde 2001 Spain
Posts: 151
Poder: 20
Xianto Va por buen camino
Nas...

Jachguate con motivo de las union, mi recomendacion de no usarlas, es porque a menos que los resultados que estas sacando de las x selects que tengas sean todos correctos y esten bien construidos, podrian salir resultados inesperados, por esto es siempre mas facil trabajar con tablas temporales, incluso es mas rapido si las tablas no estan indexadas por los campos con lo que haces la join.

Por otro lado, en los grupos de SQL que hay en google, podras encontrar algunos comentarios sobre unions que fallan aunque las querys sean correctas... Parte de este problema se soluciona con el SP 4, del sql 2000, aunque equipos con mas de 2 gb de memoria, aun no puedan instalarlo, porque este y otros problemas se verian aumentados...

Saludetes !!!
__________________
El diseño dira si tiene futuro...
Responder Con Cita
  #11  
Antiguo 10-06-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Cita:
Empezado por Xianto
Parte de este problema se soluciona con el SP 4, del sql 2000,
Bueno, he de reconocer que habia olvidado que se trata de MS SQL Server... creo entonces que es muy posible que tengas razón, aunque francamente es triste, no te parece...

Saludos.
__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #12  
Antiguo 10-06-2005
Avatar de Xianto
Xianto Xianto is offline
Miembro
 
Registrado: oct 2004
Ubicación: Nací en Neuquén (ARG), desde 2001 Spain
Posts: 151
Poder: 20
Xianto Va por buen camino
Ahora... sabes que esto es lo fabuloso de los FOROS.

Ya que aunque el código sea correcto, muchas veces falla por problemas del "proveedor" por asi decirlo.

Lo de Micro$oft pues es muy asi, hoy anda y mañana no, y nadie se explica el porque... aunque entre todos tratamos de solucionarlo dando opciones, eso es lo genial !

Saludetes !!!
__________________
El diseño dira si tiene futuro...
Responder Con Cita
  #13  
Antiguo 31-07-2006
Avatar de kuan-yiu
[kuan-yiu] kuan-yiu is offline
Miembro Premium
 
Registrado: jun 2006
Ubicación: Galicia. España.
Posts: 1.017
Poder: 19
kuan-yiu Va camino a la fama
Buceando por el foro he encontrado este hilo en el que se hace referencia a algo que me podría servir, pero que desconozco totalmente.

Cita:
Empezado por Xianto
[...]
La otra @tabla es solo de memoria, asi que por propia experiencia te sugiero que solo utilices @tabla cuando no pases los 4000 registros[...]
Me interesa saber algo más de este tipo de tablas. ¿Alguien puede darme algún enlace para documentarme? (Si es en castellano mejor)
He visto que también se llaman "Variables de tabla", pero no tengo demasiado claras sus limitaciones. ¿Podría usar la misma tabla en varios procedimientos diferentes? ¿Se puede usar una misma tabla durante una sesión? (entendiendo como sesión el tiempo que invierta el usuario dentro de la aplicación) ¿Se pueden utilizar varias al mismo tiempo?
Responder Con Cita
Respuesta



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


La franja horaria es GMT +2. Ahora son las 15:24:27.


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