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-05-2011
uper uper is offline
Miembro
 
Registrado: abr 2004
Posts: 296
Poder: 21
uper Va por buen camino
como obtener un unico valor entre dos campos de folio de sql server

Tengo una tabla que cada vez que se solicite un tramite registro el num de aprobacion y otros datos, en esta tabla guardo informacion de folio que me autorizan a usar, por decir folio inicio y folio final, la situacion se presenta cuando comienza a tener mas tramites, debo obtener solo el numero de aprobacion para el folio que estoy usando.
este es ta estructura
tabla: sellos_prt
plaza char(2), tipo char(1), numtram int, inicio char(12), final CHAR(12), numaprobacion char(12)
por ejemplo:

plaza=01, tipo=1, inicio=1, final=10, numaprobacion=380
plaza=01, tipo=1, inicio=11, final=20, numaprobacion=885

Cuando yo solicite el folio 3 me debe regresar el numaprobacion= 380 (que esta entre ese rango), para el folio 17 me debe regresar el numaprobacion=885, para el folio 5 me debe de regresar el numaprobacion= 380 y asi. cree una consulta: select top 1 numaprobacion from selloscfd_prt where plaza='01' and tipo='1' and inicio>='5' and final<='5' pero no es la esperada, me podrian ayudar
les agradesco, gracias
Responder Con Cita
  #2  
Antiguo 03-05-2011
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 24
ContraVeneno Va por buen camino
Creo que sería mejor que te estuvieras basando en la serie, en lugar de solamente el folio.

Al crear tu factura, que se seleccione la serie que vas a usar para facturar y con eso obtienes el número de aprobación y el siguiente folio... te convendría tener un lugar donde vayas guardando el siguiente folio disponible. O podrías crear una tabla donde estén todos los folios que generaste e irles cambiando el estatus dependiendo de lo que le hagan a la factura (factura, devolución, cancelación).

Si solo vas a pedir el número de folio cuando solo tienes capturado el rango, creo que te la vas a complicar más de lo normal.

Por cierto, te recomiendo ampliamente que los números los manejes como números. Los folios nunca van a contener letras por lo que te recomiendo que los declares como int y no como char....

además, si lo dejas así como char, deberás tener MUCHO cuidado porque para un char en SQL, ' 1', no es lo mismo que '1 '... y cuando quieras ordenar por folio, te vas a topar con dolor de cabeza ya que primero va a ordenar todos los 1, luegos todos los 2, etc (1, 10, 11, 12... 2, 20, 21... 3, 30, 31...).

por último, al ser char(12), significa que siempre se van a guardar 12 caracteres, así que estas guardando valores:
Código:
'1           '
cuando podrías guardar solo un caracter si lo tuvieras como int, o mínimo como varchar....
__________________


Última edición por ContraVeneno fecha: 03-05-2011 a las 01:21:14.
Responder Con Cita
  #3  
Antiguo 03-05-2011
sinalocarlos sinalocarlos is offline
Miembro
 
Registrado: sep 2006
Posts: 152
Poder: 19
sinalocarlos Va por buen camino
Cita:
Empezado por uper Ver Mensaje
Tengo una tabla que cada vez que se solicite un tramite registro el num de aprobacion y otros datos, en esta tabla guardo informacion de folio que me autorizan a usar, por decir folio inicio y folio final, la situacion se presenta cuando comienza a tener mas tramites, debo obtener solo el numero de aprobacion para el folio que estoy usando.
este es ta estructura
tabla: sellos_prt
plaza char(2), tipo char(1), numtram int, inicio char(12), final CHAR(12), numaprobacion char(12)
por ejemplo:

plaza=01, tipo=1, inicio=1, final=10, numaprobacion=380
plaza=01, tipo=1, inicio=11, final=20, numaprobacion=885

Cuando yo solicite el folio 3 me debe regresar el numaprobacion= 380 (que esta entre ese rango), para el folio 17 me debe regresar el numaprobacion=885, para el folio 5 me debe de regresar el numaprobacion= 380 y asi. cree una consulta: select top 1 numaprobacion from selloscfd_prt where plaza='01' and tipo='1' and inicio>='5' and final<='5' pero no es la esperada, me podrian ayudar
les agradesco, gracias
Tu consulta esta bien, que es lo que te regresa que no es lo esperado?
Responder Con Cita
  #4  
Antiguo 03-05-2011
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 24
ContraVeneno Va por buen camino
el problema puede venir porque está buscando un '5' sin espacios y en la base de datos está con todos los espacios ya que el campo es char(12).

tendría que hacer una conversión, o utilizar las funciones rtrim, ltrim o cambiarlo a varchar.... o lo más sencillo, manejar los números como números y declararlo como int.
__________________

Responder Con Cita
  #5  
Antiguo 05-05-2011
uper uper is offline
Miembro
 
Registrado: abr 2004
Posts: 296
Poder: 21
uper Va por buen camino
Saludos a todos, con respecto a la duda de como obtener un unico valor entre dos campos de folio de sql server, comento que por un lado tengo una tabla de folios que al generarse la factura se va a actualizando el folio, la tabla que describo como sellos_prt la uso para obtener un num de aprobacion, lo que significa que solo me autorizan un determinado rango de folios y no puedo generar mas facturas hasta que no me vuelva a autorizar mas folios.
Este num de aprobacion es importante por que necesito obtener por medio de una consulta de acuerdo al folio me de el num. de aprobacion.

Por otro lado ya los cambie los campos inicio y final por enteros y no me regresa nada de valor.

select top 1 numaprobacion from selloscfd_prt where plaza='01' and tipo='1' and inicio>=5 and final<=5

alguna suferencia les agradesco, gracias
Responder Con Cita
  #6  
Antiguo 19-05-2011
abelg abelg is offline
Miembro
 
Registrado: jul 2004
Posts: 50
Poder: 21
abelg Va por buen camino
Hola espero esto te sirva ejecutalo en el manejador de consultas de SQL Server en cualquier base de Datos pues crea temporales.

Código SQL [-]
Create Table #tmp_folio (
        plaza char(2),
        tipo int,
        numtram int,
        inicio int,
        final int,
        numaprobacion int)
        
        
insert into #tmp_folio Values ('01', 3, 1 , 1, 10, 380)
insert into #tmp_folio Values ('01', 4, 1 , 11, 20, 885)

declare @valor_buscado int
-- Ejemplo 1
set @valor_buscado = 3
Select numaprobacion
from #tmp_folio
where plaza = '01' and @valor_buscado between inicio and final 

--Ejemplo2
set @valor_buscado = 15
Select numaprobacion
from #tmp_folio
where plaza = '01' and @valor_buscado between inicio and final 

Drop table #tmp_folio

A mi me salio lo que pedías.
salu2
Responder Con Cita
  #7  
Antiguo 21-05-2011
uper uper is offline
Miembro
 
Registrado: abr 2004
Posts: 296
Poder: 21
uper Va por buen camino
saludos a todos, si pues ya lo comprove si usar temporales, y resulto es buscar un rango de folios sabiendo el folio que le voy a pasar como parametro


gracias.
Responder Con Cita
  #8  
Antiguo 23-05-2011
abelg abelg is offline
Miembro
 
Registrado: jul 2004
Posts: 50
Poder: 21
abelg Va por buen camino
que bueno que solucionaste. Yo use temporales solo para simular tus tablas.
pues no tenia tus tablas.

la solución te planteaba en esta parte del código.

Código SQL [-]
where plaza = '01' and @valor_buscado between inicio and final

Salu2
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
FOR XML + SQL SERVER 200 y campos con valor null Enan0 SQL 2 07-08-2007 01:45:55
Ayuda, Select que rescate el menor valor(unico) Overfind SQL 1 03-10-2006 05:16:31
Login contra unico server chimorito Linux 1 17-05-2005 18:52:54
como obtener el valor de un campo Yoli Conexión con bases de datos 2 23-03-2005 16:04:24
Como Obtener el valor de mi Generador NickName Firebird e Interbase 2 26-07-2003 20:54:50


La franja horaria es GMT +2. Ahora son las 01:25:55.


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