![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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 |
#2
|
||||
|
||||
convierte las fechas a tipo varchar, y dale un group by
te funcionaria un: convert(varchar, fecha, 101)
__________________
Héctor Geraldino Software Engineer |
#3
|
|||
|
|||
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 |
#4
|
||||
|
||||
no incluyas las fechas.. solo el número:
Hasta luego. ![]()
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#5
|
|||
|
|||
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 |
#6
|
||||
|
||||
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 |
#7
|
||||
|
||||
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... |
#8
|
||||
|
||||
![]() Hola Xianto.
Con respecto de: Cita:
¿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 |
#9
|
|||
|
|||
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 |
#10
|
||||
|
||||
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... |
#11
|
||||
|
||||
Cita:
![]() Saludos.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#12
|
||||
|
||||
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... |
#13
|
||||
|
||||
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:
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? |
![]() |
|
|
![]() |
|