como hacer esta consulta

03/05/2007 - 18:57 por Jorge Díaz | Informe spam
Hola amigos, quisiera saber si alguien puede ayudarme a obtener esta
consulta de una tabla de SQL Server, tengo un campo que voy a guardar el
correlativo de esta manera:

807A001, donde 8 es un valor fijo, 07 son los dígitos del año, A es la letra
del mes en orden alfabético, por ejemplo A-Enero B-Febrero, etc (ya tengo la
función), y 001 es el correlativo.

La cuestión es que necesito que el correlativo se inicialize en cada año y
en cada mes. Espero haberme explicado bien.

Preguntas similare

Leer las respuestas

#6 Jorge Diaz
04/05/2007 - 02:59 | Informe spam
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html;charset=UTF-8" http-equiv="Content-Type">
<title></title>
</head>
<body bgcolor="#ffffff" text="#000000">
<font size="-1"><font face="Tahoma">Alejandro, tienes toda la razón del
mundo, SQL aún no es mi fuerte puesto que lo estoy aprendiendo,
realmente necesitaba ésta sentencia para un soporte rápido a una
aplicación que está ya en producción en estos momentos y que no la he
desarrollado yo, es una aplicación que utiliza como cliente visual
foxpro, y por el momento lo que he hecho es traer los registros
correspondientes a un cursor, crear un índice y sobre ese índice hacer
el siguiente correlativo, un poco a la antigua, pero lo necesitabamos
rápido, pero quería saber si podría hacerlo de una forma más rápida con
una sentencia SQl<br>
<br>
muchas gracias<br>
<br>
Jorge Díaz<br>
</font></font><br>
Alejandro Mesa escribió:
<blockquote
cite="mid:"
type="cite">
<pre wrap="">Jorge Díaz,

Seria bueno si nos comentas para que quieres hacer esto. Poner logica dentro
de cadenas de caracteres no tiene mucho uso en el ambito de bases de datos
relacionales. Solo planteate escribir una sentencia "select" que selccione
todas las filas donde dicha columna cumpla:

- Año este en (2000, 2003, 2004, 2007)
- Mes en (Febrero, Mayo, Diciembre)
- Consecutivo entre 103 y 203, ademas de los consecutivos 500 y 505

Tarde o temprano estaremos desmenuzando el contenido de esta columna para
buscar valores especificos y esto no es bueno en el ambito relacional. Te
recomiendo que cada dato lo guardes en una columna por separado (fecha,
consecutivo, etc.) y se aun necesitas este valor pues entonces crees una
columna calculada.

El valor consecutivo lo puedes lograr mediante una tabla y un procedimineto
almacenado, donde se incremente el valor de una columna en dependencia del
año y mes en el que se este insertando.


AMB

"Jorge Díaz" wrote:

</pre>
<blockquote type="cite">
<pre wrap="">Hola amigos, quisiera saber si alguien puede ayudarme a obtener esta
consulta de una tabla de SQL Server, tengo un campo que voy a guardar el
correlativo de esta manera:

807A001, donde 8 es un valor fijo, 07 son los dígitos del año, A es la letra
del mes en orden alfabético, por ejemplo A-Enero B-Febrero, etc (ya tengo la
función), y 001 es el correlativo.

La cuestión es que necesito que el correlativo se inicialize en cada año y
en cada mes. Espero haberme explicado bien.




</pre>
</blockquote>
</blockquote>
</body>
</html>
Respuesta Responder a este mensaje
#7 Javier Loria
04/05/2007 - 16:20 | Informe spam
Hola Jorge:
Una opcion es "normalizar" esa columna o sea hacer que cada valor se
atomico (primera forma normal), y usar las habilidades de SQL 2000/2005 para
crear un campo calculado. Por ejemplo:
==CREATE TABLE Ordenes(
FechaOrden smalldatetime not null
, CorrrelativoMensual int not null
, Correlativo AS
CAST(YEAR(FechaOrden) AS CHAR(4))
+ CHAR(64+MONTH(GETDATE()))
+ LEFT('0000'+CAST(Correlativo AS VARCHAR(4)), 4)
)
== Si quieres puedes en Fox obtener el siguiente consecutivo o crear una
vista esconder el CorrelativoMensual y hacer el trigger para calcular el
siguiente valor cuando insertas los datos.
Puedes tambien definir el correlativo como llave primaria o si tienes
SQL 2005 se puede marcar como PERSISTED, de manera que se calcula solo una
vez cuando se inserta y se almacena su valor.
Saludos,


Javier Loria
Costa Rica (MVP)
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.


"Jorge Diaz" wrote in message
news:%
Alejandro, tienes toda la razón del mundo, SQL aún no es mi fuerte puesto
que lo estoy aprendiendo, realmente necesitaba ésta sentencia para un
soporte rápido a una aplicación que está ya en producción en estos momentos
y que no la he desarrollado yo, es una aplicación que utiliza como cliente
visual foxpro, y por el momento lo que he hecho es traer los registros
correspondientes a un cursor, crear un índice y sobre ese índice hacer el
siguiente correlativo, un poco a la antigua, pero lo necesitabamos rápido,
pero quería saber si podría hacerlo de una forma más rápida con una
sentencia SQl

muchas gracias

Jorge Díaz

Alejandro Mesa escribió:
Jorge Díaz,

Seria bueno si nos comentas para que quieres hacer esto. Poner logica dentro
de cadenas de caracteres no tiene mucho uso en el ambito de bases de datos
relacionales. Solo planteate escribir una sentencia "select" que selccione
todas las filas donde dicha columna cumpla:

- Año este en (2000, 2003, 2004, 2007)
- Mes en (Febrero, Mayo, Diciembre)
- Consecutivo entre 103 y 203, ademas de los consecutivos 500 y 505

Tarde o temprano estaremos desmenuzando el contenido de esta columna para
buscar valores especificos y esto no es bueno en el ambito relacional. Te
recomiendo que cada dato lo guardes en una columna por separado (fecha,
consecutivo, etc.) y se aun necesitas este valor pues entonces crees una
columna calculada.

El valor consecutivo lo puedes lograr mediante una tabla y un procedimineto
almacenado, donde se incremente el valor de una columna en dependencia del
año y mes en el que se este insertando.


AMB

"Jorge Díaz" wrote:


Hola amigos, quisiera saber si alguien puede ayudarme a obtener esta
consulta de una tabla de SQL Server, tengo un campo que voy a guardar el
correlativo de esta manera:

807A001, donde 8 es un valor fijo, 07 son los dígitos del año, A es la letra
del mes en orden alfabético, por ejemplo A-Enero B-Febrero, etc (ya tengo la
función), y 001 es el correlativo.

La cuestión es que necesito que el correlativo se inicialize en cada año y
en cada mes. Espero haberme explicado bien.
Respuesta Responder a este mensaje
#8 Jesús López
04/05/2007 - 16:59 | Informe spam
Javier,

No puedes incluir el Nombre del campo calculado en la expresión que define
el campo calculado, además hay que usar RIGHT en lugar de LEFT.

Sería así:

CREATE TABLE Ordenes(
FechaOrden smalldatetime not null
, CorrrelativoMensual int not null
, Correlativo smallint
, Codigo AS
CAST(YEAR(FechaOrden) AS CHAR(4))
+ CHAR(64+MONTH(GETDATE()))
+ RIGHT('0000'+CAST(Correlativo AS VARCHAR(4)), 4)
)


Jesús

"Javier Loria" escribió en el mensaje
news:
Hola Jorge:
Una opcion es "normalizar" esa columna o sea hacer que cada valor se
atomico (primera forma normal), y usar las habilidades de SQL 2000/2005
para crear un campo calculado. Por ejemplo:
==> CREATE TABLE Ordenes(
FechaOrden smalldatetime not null
, CorrrelativoMensual int not null
, Correlativo AS
CAST(YEAR(FechaOrden) AS CHAR(4))
+ CHAR(64+MONTH(GETDATE()))
+ LEFT('0000'+CAST(Correlativo AS VARCHAR(4)), 4)
)
==> Si quieres puedes en Fox obtener el siguiente consecutivo o crear una
vista esconder el CorrelativoMensual y hacer el trigger para calcular el
siguiente valor cuando insertas los datos.
Puedes tambien definir el correlativo como llave primaria o si tienes
SQL 2005 se puede marcar como PERSISTED, de manera que se calcula solo una
vez cuando se inserta y se almacena su valor.
Saludos,


Javier Loria
Costa Rica (MVP)
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.


"Jorge Diaz" wrote in message
news:%
Alejandro, tienes toda la razón del mundo, SQL aún no es mi fuerte puesto
que lo estoy aprendiendo, realmente necesitaba ésta sentencia para un
soporte rápido a una aplicación que está ya en producción en estos
momentos y que no la he desarrollado yo, es una aplicación que utiliza
como cliente visual foxpro, y por el momento lo que he hecho es traer los
registros correspondientes a un cursor, crear un índice y sobre ese índice
hacer el siguiente correlativo, un poco a la antigua, pero lo
necesitabamos rápido, pero quería saber si podría hacerlo de una forma más
rápida con una sentencia SQl

muchas gracias

Jorge Díaz

Alejandro Mesa escribió:
Jorge Díaz,

Seria bueno si nos comentas para que quieres hacer esto. Poner logica
dentro
de cadenas de caracteres no tiene mucho uso en el ambito de bases de datos
relacionales. Solo planteate escribir una sentencia "select" que selccione
todas las filas donde dicha columna cumpla:

- Año este en (2000, 2003, 2004, 2007)
- Mes en (Febrero, Mayo, Diciembre)
- Consecutivo entre 103 y 203, ademas de los consecutivos 500 y 505

Tarde o temprano estaremos desmenuzando el contenido de esta columna para
buscar valores especificos y esto no es bueno en el ambito relacional. Te
recomiendo que cada dato lo guardes en una columna por separado (fecha,
consecutivo, etc.) y se aun necesitas este valor pues entonces crees una
columna calculada.

El valor consecutivo lo puedes lograr mediante una tabla y un
procedimineto
almacenado, donde se incremente el valor de una columna en dependencia del
año y mes en el que se este insertando.


AMB

"Jorge Díaz" wrote:


Hola amigos, quisiera saber si alguien puede ayudarme a obtener esta
consulta de una tabla de SQL Server, tengo un campo que voy a guardar el
correlativo de esta manera:

807A001, donde 8 es un valor fijo, 07 son los dígitos del año, A es la
letra
del mes en orden alfabético, por ejemplo A-Enero B-Febrero, etc (ya tengo
la
función), y 001 es el correlativo.

La cuestión es que necesito que el correlativo se inicialize en cada año y
en cada mes. Espero haberme explicado bien.






Respuesta Responder a este mensaje
#9 Javier Loria
04/05/2007 - 17:30 | Informe spam
Hola Jesus:
Gracias, la consulta corregida y espero que buena seria:
==CREATE TABLE Ordenes(
FechaOrden smalldatetime not null
, CorrrelativoMensual int not null
, Correlativo smallint
, Codigo AS
CAST(YEAR(FechaOrden) AS CHAR(4))
+ CHAR(64+MONTH(GETDATE()))
+ LEFT('0000'+CAST(CorrelativoMensual AS VARCHAR(4)), 4)
)
== Saludos,


Javier Loria
Costa Rica (MVP)
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.

"Jesús López" wrote in message
news:
Javier,

No puedes incluir el Nombre del campo calculado en la expresión que define
el campo calculado, además hay que usar RIGHT en lugar de LEFT.

Sería así:

CREATE TABLE Ordenes(
FechaOrden smalldatetime not null
, CorrrelativoMensual int not null
, Correlativo smallint
, Codigo AS
CAST(YEAR(FechaOrden) AS CHAR(4))
+ CHAR(64+MONTH(GETDATE()))
+ RIGHT('0000'+CAST(Correlativo AS VARCHAR(4)), 4)
)


Jesús

"Javier Loria" escribió en el mensaje
news:
Hola Jorge:
Una opcion es "normalizar" esa columna o sea hacer que cada valor se
atomico (primera forma normal), y usar las habilidades de SQL 2000/2005
para crear un campo calculado. Por ejemplo:
==>> CREATE TABLE Ordenes(
FechaOrden smalldatetime not null
, CorrrelativoMensual int not null
, Correlativo AS
CAST(YEAR(FechaOrden) AS CHAR(4))
+ CHAR(64+MONTH(GETDATE()))
+ LEFT('0000'+CAST(Correlativo AS VARCHAR(4)), 4)
)
==>> Si quieres puedes en Fox obtener el siguiente consecutivo o crear una
vista esconder el CorrelativoMensual y hacer el trigger para calcular el
siguiente valor cuando insertas los datos.
Puedes tambien definir el correlativo como llave primaria o si tienes
SQL 2005 se puede marcar como PERSISTED, de manera que se calcula solo
una vez cuando se inserta y se almacena su valor.
Saludos,


Javier Loria
Costa Rica (MVP)
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.


"Jorge Diaz" wrote in message
news:%
Alejandro, tienes toda la razón del mundo, SQL aún no es mi fuerte puesto
que lo estoy aprendiendo, realmente necesitaba ésta sentencia para un
soporte rápido a una aplicación que está ya en producción en estos
momentos y que no la he desarrollado yo, es una aplicación que utiliza
como cliente visual foxpro, y por el momento lo que he hecho es traer los
registros correspondientes a un cursor, crear un índice y sobre ese
índice hacer el siguiente correlativo, un poco a la antigua, pero lo
necesitabamos rápido, pero quería saber si podría hacerlo de una forma
más rápida con una sentencia SQl

muchas gracias

Jorge Díaz

Alejandro Mesa escribió:
Jorge Díaz,

Seria bueno si nos comentas para que quieres hacer esto. Poner logica
dentro
de cadenas de caracteres no tiene mucho uso en el ambito de bases de
datos
relacionales. Solo planteate escribir una sentencia "select" que
selccione
todas las filas donde dicha columna cumpla:

- Año este en (2000, 2003, 2004, 2007)
- Mes en (Febrero, Mayo, Diciembre)
- Consecutivo entre 103 y 203, ademas de los consecutivos 500 y 505

Tarde o temprano estaremos desmenuzando el contenido de esta columna para
buscar valores especificos y esto no es bueno en el ambito relacional. Te
recomiendo que cada dato lo guardes en una columna por separado (fecha,
consecutivo, etc.) y se aun necesitas este valor pues entonces crees una
columna calculada.

El valor consecutivo lo puedes lograr mediante una tabla y un
procedimineto
almacenado, donde se incremente el valor de una columna en dependencia
del
año y mes en el que se este insertando.


AMB

"Jorge Díaz" wrote:


Hola amigos, quisiera saber si alguien puede ayudarme a obtener esta
consulta de una tabla de SQL Server, tengo un campo que voy a guardar el
correlativo de esta manera:

807A001, donde 8 es un valor fijo, 07 son los dígitos del año, A es la
letra
del mes en orden alfabético, por ejemplo A-Enero B-Febrero, etc (ya tengo
la
función), y 001 es el correlativo.

La cuestión es que necesito que el correlativo se inicialize en cada año
y
en cada mes. Espero haberme explicado bien.










Respuesta Responder a este mensaje
#10 Alejandro Mesa
04/05/2007 - 17:49 | Informe spam
Javier,

Gracías por continuar el hilo, pues a mi me cuesta mucho trabajo hacerlo
usando la aplicacion Web. Espero que este ?? deje de postear tanta basura y
todo regrese a la normalidad.

Saludos,
Alejandro Mesa

"Javier Loria" wrote:

Hola Jesus:
Gracias, la consulta corregida y espero que buena seria:
==> CREATE TABLE Ordenes(
FechaOrden smalldatetime not null
, CorrrelativoMensual int not null
, Correlativo smallint
, Codigo AS
CAST(YEAR(FechaOrden) AS CHAR(4))
+ CHAR(64+MONTH(GETDATE()))
+ LEFT('0000'+CAST(CorrelativoMensual AS VARCHAR(4)), 4)
)
==> Saludos,


Javier Loria
Costa Rica (MVP)
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.

"Jess Lpez" wrote in message
news:
> Javier,
>
> No puedes incluir el Nombre del campo calculado en la expresin que define
> el campo calculado, adems hay que usar RIGHT en lugar de LEFT.
>
> Sera as:
>
> CREATE TABLE Ordenes(
> FechaOrden smalldatetime not null
> , CorrrelativoMensual int not null
> , Correlativo smallint
> , Codigo AS
> CAST(YEAR(FechaOrden) AS CHAR(4))
> + CHAR(64+MONTH(GETDATE()))
> + RIGHT('0000'+CAST(Correlativo AS VARCHAR(4)), 4)
> )
>
>
> Jess
>
> "Javier Loria" escribi en el mensaje
> news:
>> Hola Jorge:
>> Una opcion es "normalizar" esa columna o sea hacer que cada valor se
>> atomico (primera forma normal), y usar las habilidades de SQL 2000/2005
>> para crear un campo calculado. Por ejemplo:
>> ==> >> CREATE TABLE Ordenes(
>> FechaOrden smalldatetime not null
>> , CorrrelativoMensual int not null
>> , Correlativo AS
>> CAST(YEAR(FechaOrden) AS CHAR(4))
>> + CHAR(64+MONTH(GETDATE()))
>> + LEFT('0000'+CAST(Correlativo AS VARCHAR(4)), 4)
>> )
>> ==> >> Si quieres puedes en Fox obtener el siguiente consecutivo o crear una
>> vista esconder el CorrelativoMensual y hacer el trigger para calcular el
>> siguiente valor cuando insertas los datos.
>> Puedes tambien definir el correlativo como llave primaria o si tienes
>> SQL 2005 se puede marcar como PERSISTED, de manera que se calcula solo
>> una vez cuando se inserta y se almacena su valor.
>> Saludos,
>>
>>
>> Javier Loria
>> Costa Rica (MVP)
>> Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
>> que pueda ser copiado y pegado al Query Analizer.
>> La version de SQL y Service Pack tambien ayuda.
>>
>>
>> "Jorge Diaz" wrote in message
>> news:%
>> Alejandro, tienes toda la razn del mundo, SQL an no es mi fuerte puesto
>> que lo estoy aprendiendo, realmente necesitaba sta sentencia para un
>> soporte rpido a una aplicacin que est ya en produccin en estos
>> momentos y que no la he desarrollado yo, es una aplicacin que utiliza
>> como cliente visual foxpro, y por el momento lo que he hecho es traer los
>> registros correspondientes a un cursor, crear un ndice y sobre ese
>> ndice hacer el siguiente correlativo, un poco a la antigua, pero lo
>> necesitabamos rpido, pero quera saber si podra hacerlo de una forma
>> ms rpida con una sentencia SQl
>>
>> muchas gracias
>>
>> Jorge Daz
>>
>> Alejandro Mesa escribi:
>> Jorge Daz,
>>
>> Seria bueno si nos comentas para que quieres hacer esto. Poner logica
>> dentro
>> de cadenas de caracteres no tiene mucho uso en el ambito de bases de
>> datos
>> relacionales. Solo planteate escribir una sentencia "select" que
>> selccione
>> todas las filas donde dicha columna cumpla:
>>
>> - Ao este en (2000, 2003, 2004, 2007)
>> - Mes en (Febrero, Mayo, Diciembre)
>> - Consecutivo entre 103 y 203, ademas de los consecutivos 500 y 505
>>
>> Tarde o temprano estaremos desmenuzando el contenido de esta columna para
>> buscar valores especificos y esto no es bueno en el ambito relacional. Te
>> recomiendo que cada dato lo guardes en una columna por separado (fecha,
>> consecutivo, etc.) y se aun necesitas este valor pues entonces crees una
>> columna calculada.
>>
>> El valor consecutivo lo puedes lograr mediante una tabla y un
>> procedimineto
>> almacenado, donde se incremente el valor de una columna en dependencia
>> del
>> ao y mes en el que se este insertando.
>>
>>
>> AMB
>>
>> "Jorge Daz" wrote:
>>
>>
>> Hola amigos, quisiera saber si alguien puede ayudarme a obtener esta
>> consulta de una tabla de SQL Server, tengo un campo que voy a guardar el
>> correlativo de esta manera:
>>
>> 807A001, donde 8 es un valor fijo, 07 son los dgitos del ao, A es la
>> letra
>> del mes en orden alfabtico, por ejemplo A-Enero B-Febrero, etc (ya tengo
>> la
>> funcin), y 001 es el correlativo.
>>
>> La cuestin es que necesito que el correlativo se inicialize en cada ao
>> y
>> en cada mes. Espero haberme explicado bien.
>>
>>
>>
>>
>>
>>
>
>

Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida