Conduce Chile

General => De Todo Un Poco => Mensaje iniciado por: Mithrandir en Noviembre 08, 2012, 15:26:41 pm

Título: SQL consulta
Publicado por: Mithrandir en Noviembre 08, 2012, 15:26:41 pm
Estimados, necesito de vuestra ayuda

tengo una tabla temporal con algunos rut y saldos, necesito hacer un query que los agrupe por rut y el saldo lo valla sumando

rut                       Saldo
1-6                        123
1-7                        125
1-6                        987
1-8                        978
1-6                        456

necesito agruparlo por rut y el saldo sumar el total y mostrarlo en un campo, como lo puedo realizar, no se pueden ocupar cursores
Título: Re:SQL consulta
Publicado por: Tandersan en Noviembre 08, 2012, 15:30:49 pm
Eso debería ser:

select rut, sum(saldo) as saldo_consolidado
from tabla
group by rut

Luego si creaste un objeto tipo Recordset, digamos A, la información debería ser:
A.rut
A.saldo_consolidado
Título: Re:SQL consulta
Publicado por: maurofl en Noviembre 08, 2012, 15:32:28 pm
Eso eso...  :clap: :clap: :clap:
Título: Re:SQL consulta
Publicado por: Citation-X en Noviembre 08, 2012, 15:36:36 pm
Eso debería ser:

select rut, sum(saldo) as saldo_consolidado
from tabla
group by rut

Luego si creaste un objeto tipo Recordset, digamos A, la información debería ser:
A.rut
A.saldo_consolidado

Así mismo se hace  8)

Título: Re:SQL consulta
Publicado por: Mithrandir en Noviembre 08, 2012, 15:37:04 pm
Eso debería ser:

select rut, sum(saldo) as saldo_consolidado
from tabla
group by rut

Luego si creaste un objeto tipo Recordset, digamos A, la información debería ser:
A.rut
A.saldo_consolidado

Ok, lo otro que me acabo de dar cuenta es que la consulta donde esta el rut esta en la tabla A y el saldo en la tabla B, quedaria algo asi

select rut, sum(B.saldo) as saldo_consolidado
from tabla A
inner join tabla B
on a.rut = B.rut
group by A.rut
Título: Re:SQL consulta
Publicado por: Tandersan en Noviembre 08, 2012, 15:44:22 pm
Ok, lo otro que me acabo de dar cuenta es que la consulta donde esta el rut esta en la tabla A y el saldo en la tabla B, quedaria algo asi

select rut, sum(B.saldo) as saldo_consolidado
from tabla A
inner join tabla B
on a.rut = B.rut
group by A.rut

Si, solo falta el A. en el select rut.
El resto está bien, sí solo sí buscas referencias que deben estar en ambas tablas.
Título: Re:SQL consulta
Publicado por: Mithrandir en Noviembre 08, 2012, 15:46:29 pm
Si, solo falta el A. en el select rut.
El resto está bien, sí solo sí buscas referencias que deben estar en ambas tablas.

vale tandersan me salio todo como queria, muchas gracias
Título: Re:SQL consulta
Publicado por: Citation-X en Noviembre 08, 2012, 15:56:11 pm
vale tandersan me salio todo como queria, muchas gracias

Mínimo una "Cross" en el kika Ilmenau  :pozozipy:

Título: Re:SQL consulta
Publicado por: negroVeloz en Noviembre 08, 2012, 15:57:54 pm
Si después a alguien le falta plata en la cuenta corriente, la culpa es de Tandersan.  :cop2:
 :risa2: :risa2: :risa2:
Título: Re:SQL consulta
Publicado por: Citation-X en Noviembre 08, 2012, 16:10:05 pm
Si después a alguien le falta plata en la cuenta corriente, la culpa es de Tandersan.  :cop2:
 :risa2: :risa2: :risa2:


ahí se podría fusionar este tema con el de los fraudes bancarios  :risa2: :risa2:

Título: Re:SQL consulta
Publicado por: Tandersan en Noviembre 08, 2012, 16:11:09 pm
Mínimo una "Cross" en el kika Ilmenau  :pozozipy:

 :thumbsup: :thumbsup: :thumbsup: :thumbsup:
Título: Re:SQL consulta
Publicado por: negroVeloz en Noviembre 08, 2012, 16:11:43 pm

ahí se podría fusionar este tema con el de los fraudes bancarios  :risa2: :risa2:
:thumbsup:
TSF podrá inventar otra nueva fantástica teoría.
Título: Re:SQL consulta
Publicado por: Tandersan en Noviembre 08, 2012, 16:11:49 pm
Si después a alguien le falta plata en la cuenta corriente, la culpa es de Tandersan.  :cop2:
 :risa2: :risa2: :risa2:


ahí se podría fusionar este tema con el de los fraudes bancarios  :risa2: :risa2:

 :-[
Título: Re:SQL consulta
Publicado por: Mithrandir en Noviembre 08, 2012, 16:11:58 pm
tengo otra consulta  xD

mi jefe me pidio usar ROUND en el campo Saldo_Total hay que darle un formato de 18 (00000 y el la sumatoria) y no cacho como usar este comando. alguien me puede echar una mano:( en el spoiler tengo la consulta que realize gracias a ustedes.  )

[spoiler]
SELECT STUFF('000000000',09-DATALENGTH(RTRIM(PAR.PAR_RUT_PARTICIPE))+1, DATALENGTH(RTRIM(PAR.PAR_RUT_PARTICIPE)),RTRIM(PAR.PAR_RUT_PARTICIPE)),
   STUFF('0000',04-DATALENGTH(RTRIM(Age_agente))+1, DATALENGTH(RTRIM(Age_Agente)),RTRIM(Age_Agente)),
   STUFF('000',03-DATALENGTH(RTRIM(Suc_Sucursal))+1, DATALENGTH(RTRIM(Suc_Sucursal)),RTRIM(Suc_Sucursal)),
   sum(CUO.Cuo_Saldo_Cuotas) as Saldo_Total
   from Fmu_Saldo_Cuotas CUO
   inner join  FMU_PARTICIPES PAR
   on PAR.Par_rut_Participe = CUO.Par_rut_Participe
   Group By PAR.Par_rut_Participe, Age_Agente, Suc_Sucursal[/spoiler]
Título: Re:SQL consulta
Publicado por: negroVeloz en Noviembre 08, 2012, 16:19:15 pm
tengo otra consulta  xD

mi jefe me pidio usar ROUND en el campo Saldo_Total hay que darle un formato de 18 (00000 y el la sumatoria) y no cacho como usar este comando. alguien me puede echar una mano:( en el spoiler tengo la consulta que realize gracias a ustedes.  )

[spoiler]
SELECT STUFF('000000000',09-DATALENGTH(RTRIM(PAR.PAR_RUT_PARTICIPE))+1, DATALENGTH(RTRIM(PAR.PAR_RUT_PARTICIPE)),RTRIM(PAR.PAR_RUT_PARTICIPE)),
   STUFF('0000',04-DATALENGTH(RTRIM(Age_agente))+1, DATALENGTH(RTRIM(Age_Agente)),RTRIM(Age_Agente)),
   STUFF('000',03-DATALENGTH(RTRIM(Suc_Sucursal))+1, DATALENGTH(RTRIM(Suc_Sucursal)),RTRIM(Suc_Sucursal)),
   sum(CUO.Cuo_Saldo_Cuotas) as Saldo_Total
   from Fmu_Saldo_Cuotas CUO
   inner join  FMU_PARTICIPES PAR
   on PAR.Par_rut_Participe = CUO.Par_rut_Participe
   Group By PAR.Par_rut_Participe, Age_Agente, Suc_Sucursal[/spoiler]
ROUND es para aproximar. SELECT ROUND(3.1415, 2) = 3.14

Para nada usaría STUFF ni ROUND para formatear números. Si se trata de formateo, mejor hacerlo través de la aplicación y no en sql, lo cual es más fácil y sobre todo seguro.
Título: Re:SQL consulta
Publicado por: Tandersan en Noviembre 08, 2012, 16:25:37 pm
¿En qué motor trabajas?
Y NV tiene razón, si es por formatear es mejor hacerlo vía la aplicación usando javascript por ejemplo, y enviar el número "limpio" a la base de datos (o viceversa cuando se rescata de la base y se imprime en pantalla).

Si no tienes opción, entonces sería algo como:

STUFF(
'00000000000000000',
18 - DATALENGTH(RTRIM(ROUND(SUM(SALDOS), 0))) + 1,
DATALENGTH(RTRIM(ROUND(SUM(SALDOS), 0))),
RTRIM(ROUND(SUM(SALDOS), 0))
)

¿No tiene función RIGHT()?
Título: Re:SQL consulta
Publicado por: Mithrandir en Noviembre 08, 2012, 16:34:13 pm
ROUND es para aproximar. SELECT ROUND(3.1415, 2) = 3.14

Para nada usaría STUFF ni ROUND para formatear números. Si se trata de formateo, mejor hacerlo través de la aplicación y no en sql, lo cual es más fácil y sobre todo seguro.

no hay aplicación, son mallas BATCH que llaman a procedimientos SQL. 

Citar
Publicado por: Tandersan
« : Hoy a las 18:25:37 » Insertar Cita
¿En qué motor trabajas?

sql 2000 y BATCH
Título: Re:SQL consulta
Publicado por: negroVeloz en Noviembre 08, 2012, 16:55:49 pm
Si estás utilizando procedimientos almacenados, entonces podrías crear una función almacenada que formatee el número, por ejemplo llamada format_num(decimal).
De esta forma cuando realices la consulta sql, te queda más limpio el código:

select ...., format_num(decimal) as Saldo_Total, ... from
Título: Re:SQL consulta
Publicado por: Comufacho en Noviembre 08, 2012, 17:01:52 pm
Informatico frustrado detected  :risa2:

Si estás utilizando procedimientos almacenados, entonces podrías crear una función almacenada que formatee el número, por ejemplo llamada format_num(decimal).
De esta forma cuando realices la consulta sql, te queda más limpio el código:

select ...., format_num(decimal) as Saldo_Total, ... from
Título: Re:SQL consulta
Publicado por: negroVeloz en Noviembre 08, 2012, 17:07:08 pm
Informatico frustrado detected  :risa2:
Ingeniero Comercial frustado detected.  :uy:
Título: Re:SQL consulta
Publicado por: Comufacho en Noviembre 08, 2012, 17:08:58 pm
Ingeniero Comercial frustado detected.  :uy:

Me sobró puntaje :risa2: En todo caso no fue en mala... queria copuchar porque no estudiaste informática... si tienes tanta facilidad.
Título: Re: Re:SQL consulta
Publicado por: negroVeloz en Noviembre 08, 2012, 18:19:32 pm
Me sobró puntaje :risa2: En todo caso no fue en mala... queria copuchar porque no estudiaste informática... si tienes tanta facilidad.
Jajaja.
En realidad me gusta programar, pero ser informático es más que saber programar como en 20 lenguajes.

Enviado desde mi GT-S5830L usando Tapatalk 2

Título: Re:SQL consulta
Publicado por: Tandersan en Noviembre 08, 2012, 19:04:29 pm
Me sobró puntaje :risa2: En todo caso no fue en mala... queria copuchar porque no estudiaste informática... si tienes tanta facilidad.

Para el chateo loco.  >:D
Título: Re:SQL consulta
Publicado por: Comufacho en Noviembre 08, 2012, 19:13:22 pm
Una vez que la inquietud se resuelve, el tema queda abierto para chatear :nanay:

Para el chateo loco.  >:D
Título: Re:SQL consulta
Publicado por: Tandersan en Noviembre 08, 2012, 20:10:36 pm
Una vez que la inquietud se resuelve, el tema queda abierto para chatear :nanay:

Para los que aportamos, 100% de acuerdo.  :thumbsup:
Título: Re:SQL consulta
Publicado por: Mithrandir en Noviembre 09, 2012, 08:41:36 am
una consulta, estoy compilando el procedimiento y me arroja este error: Server: Msg 213, Level 16, State 4, Procedure SVC_RPE_GNR_ITF_SEG_CLI, Line 29
Insert Error: Column name or number of supplied values does not match table definition., en la tabla tengo 4 campos e inserto 4 campos, no cacho donde esta el problema.

[spoiler]CREATE TABLE TEMPDB.GUEST.TSFM_SEG_CLI (   
RUT VARCHAR(10),
Age_Agente varchar(4),
Suc_sucursal varchar(3),
Saldo_total Varchar(18))

INSERT INTO TEMPDB.GUEST.TSFM_SEG_CLI
select STUFF('000000000',09-DATALENGTH(RTRIM(PAR.PAR_RUT_PARTICIPE))+1, DATALENGTH(RTRIM(PAR.PAR_RUT_PARTICIPE)),RTRIM(PAR.PAR_RUT_PARTICIPE)) + ';' +
      STUFF('0000',04-DATALENGTH(RTRIM(Age_agente))+1, DATALENGTH(RTRIM(Age_Agente)),RTRIM(Age_Agente))                                       + ';' +
      STUFF('000',03-DATALENGTH(RTRIM(Suc_Sucursal))+1, DATALENGTH(RTRIM(Suc_Sucursal)),RTRIM(Suc_Sucursal))                                  + ';' + 
      CONVERT(CHAR(19),STUFF('00000000000000000',18-DATALENGTH(RTRIM(ROUND(sum(CUO.Cuo_Saldo_Cuotas), 0)))+1,DATALENGTH(RTRIM(ROUND(SUM(CUO.Cuo_Saldo_Cuotas), 0))),RTRIM(ROUND(SUM(CUO.Cuo_Saldo_Cuotas), 0))))
from Fmu_Saldo_Cuotas CUO
   inner join  FMU_PARTICIPES PAR
   on PAR.Par_rut_Participe = CUO.Par_rut_Participe
where cuo_fecha = '20100331'
Group By PAR.Par_rut_Participe, Age_Agente, Suc_Sucursal[/spoiler]
Título: Re:SQL consulta
Publicado por: Tandersan en Noviembre 09, 2012, 08:55:17 am
una consulta, estoy compilando el procedimiento y me arroja este error: Server: Msg 213, Level 16, State 4, Procedure SVC_RPE_GNR_ITF_SEG_CLI, Line 29
Insert Error: Column name or number of supplied values does not match table definition., en la tabla tengo 4 campos e inserto 4 campos, no cacho donde esta el problema.

[spoiler]CREATE TABLE TEMPDB.GUEST.TSFM_SEG_CLI (   
RUT VARCHAR(10),
Age_Agente varchar(4),
Suc_sucursal varchar(3),
Saldo_total Varchar(18))

INSERT INTO TEMPDB.GUEST.TSFM_SEG_CLI
select STUFF('000000000',09-DATALENGTH(RTRIM(PAR.PAR_RUT_PARTICIPE))+1, DATALENGTH(RTRIM(PAR.PAR_RUT_PARTICIPE)),RTRIM(PAR.PAR_RUT_PARTICIPE)) + ';' +
      STUFF('0000',04-DATALENGTH(RTRIM(Age_agente))+1, DATALENGTH(RTRIM(Age_Agente)),RTRIM(Age_Agente))                                       + ';' +
      STUFF('000',03-DATALENGTH(RTRIM(Suc_Sucursal))+1, DATALENGTH(RTRIM(Suc_Sucursal)),RTRIM(Suc_Sucursal))                                  + ';' + 
      CONVERT(CHAR(19),STUFF('00000000000000000',18-DATALENGTH(RTRIM(ROUND(sum(CUO.Cuo_Saldo_Cuotas), 0)))+1,DATALENGTH(RTRIM(ROUND(SUM(CUO.Cuo_Saldo_Cuotas), 0))),RTRIM(ROUND(SUM(CUO.Cuo_Saldo_Cuotas), 0))))
from Fmu_Saldo_Cuotas CUO
   inner join  FMU_PARTICIPES PAR
   on PAR.Par_rut_Participe = CUO.Par_rut_Participe
where cuo_fecha = '20100331'
Group By PAR.Par_rut_Participe, Age_Agente, Suc_Sucursal[/spoiler]

¿No tienes una interfaz donde puedas ejecutar la consulta SQL?
No tengo práctica con SQL Server, así que puedo estar totalmente perdido. Dicho eso, vería dos cosas:
- ¿Permite la separación de campos por punto y coma (;)? Prueba usando coma (,)
- Si eso no era, ejecuta la consulta en una interfaz, y ve si efectivamente los largos que retorna, son los largos definidos en la tabla que creaste.
Título: Re:SQL consulta
Publicado por: Mithrandir en Noviembre 09, 2012, 09:10:34 am
¿No tienes una interfaz donde puedas ejecutar la consulta SQL?
No tengo práctica con SQL Server, así que puedo estar totalmente perdido. Dicho eso, vería dos cosas:
- ¿Permite la separación de campos por punto y coma (;)? Prueba usando coma (,)
- Si eso no era, ejecuta la consulta en una interfaz, y ve si efectivamente los largos que retorna, son los largos definidos en la tabla que creaste.

separe por comas, y dice lo mismo, los largos de la tabla estan bien, por eso no entiendo por que se cae la consulta
Título: Re:SQL consulta
Publicado por: negroVeloz en Noviembre 09, 2012, 09:11:16 am
una consulta, estoy compilando el procedimiento y me arroja este error: Server: Msg 213, Level 16, State 4, Procedure SVC_RPE_GNR_ITF_SEG_CLI, Line 29
Insert Error: Column name or number of supplied values does not match table definition., en la tabla tengo 4 campos e inserto 4 campos, no cacho donde esta el problema.

[spoiler]CREATE TABLE TEMPDB.GUEST.TSFM_SEG_CLI (   
RUT VARCHAR(10),
Age_Agente varchar(4),
Suc_sucursal varchar(3),
Saldo_total Varchar(18))

INSERT INTO TEMPDB.GUEST.TSFM_SEG_CLI
select STUFF('000000000',09-DATALENGTH(RTRIM(PAR.PAR_RUT_PARTICIPE))+1, DATALENGTH(RTRIM(PAR.PAR_RUT_PARTICIPE)),RTRIM(PAR.PAR_RUT_PARTICIPE)) + ';' +
      STUFF('0000',04-DATALENGTH(RTRIM(Age_agente))+1, DATALENGTH(RTRIM(Age_Agente)),RTRIM(Age_Agente))                                       + ';' +
      STUFF('000',03-DATALENGTH(RTRIM(Suc_Sucursal))+1, DATALENGTH(RTRIM(Suc_Sucursal)),RTRIM(Suc_Sucursal))                                  + ';' + 
      CONVERT(CHAR(19),STUFF('00000000000000000',18-DATALENGTH(RTRIM(ROUND(sum(CUO.Cuo_Saldo_Cuotas), 0)))+1,DATALENGTH(RTRIM(ROUND(SUM(CUO.Cuo_Saldo_Cuotas), 0))),RTRIM(ROUND(SUM(CUO.Cuo_Saldo_Cuotas), 0))))
from Fmu_Saldo_Cuotas CUO
   inner join  FMU_PARTICIPES PAR
   on PAR.Par_rut_Participe = CUO.Par_rut_Participe
where cuo_fecha = '20100331'
Group By PAR.Par_rut_Participe, Age_Agente, Suc_Sucursal[/spoiler]
Está medio complicada la consulta SQL, y la miré a la rápida, pero parece la consulta select está concatenada y finalmente sólo estás arrojando 1 columna. Creo que el error está en + ';' +, todo eso debería ser coma.
Título: Re:SQL consulta
Publicado por: Mithrandir en Noviembre 09, 2012, 09:15:25 am
Está medio complicada la consulta SQL, y la miré a la rápida, pero parece la consulta select está concatenada y finalmente sólo estás arrojando 1 columna. Creo que el error está en + ';' +, todo eso debería ser coma.

modifique el procedimiento de (;) a (,) igual aparece el mismo error, y entonces como lo concatenaria?????
Título: Re:SQL consulta
Publicado por: Tandersan en Noviembre 09, 2012, 09:16:02 am
Está medio complicada la consulta SQL, y la miré a la rápida, pero parece la consulta select está concatenada y finalmente sólo estás arrojando 1 columna. Creo que el error está en + ';' +, todo eso debería ser coma.

Ah veldá, es una consulta absoluta, no tiene variables pasadas por el procedimiento así que no debería tener esos +, porque estaría concatenando todo en una columna.
Título: Re:SQL consulta
Publicado por: negroVeloz en Noviembre 09, 2012, 09:22:10 am
modifique el procedimiento de (;) a (,) igual aparece el mismo error, y entonces como lo concatenaria?????
Está bien concatenada. Pero el problema es que no debes concatenar 4 columnas en 1 sola, si los resultados los vas a copiar en una tabla con 4 columnas. De hecho, eso es lo que te está diciendo el error: "number of supplied values does not match table definition".
Título: Re:SQL consulta
Publicado por: Mithrandir en Noviembre 09, 2012, 09:34:01 am
o sea seria asi:

+ ( ; ) + , + ( ; ) +, y etc etc etc
Título: Re:SQL consulta
Publicado por: Tandersan en Noviembre 09, 2012, 09:37:15 am
o sea seria asi:

+ ( ; ) + , + ( ; ) +, y etc etc etc

Es que a mi me queda la duda de por qué es

select a + ; + b (concatenando)

y no

selecy a, b (sin concatenar)
Título: Re:SQL consulta
Publicado por: negroVeloz en Noviembre 09, 2012, 09:40:23 am
Es que a mi me queda la duda de por qué es

select a + ; + b (concatenando)

y no

selecy a, b (sin concatenar)
Yo tengo la misma duda, por qué quieres concatenar??. Si vas a meter en una tabla temporal los resultados, simplemente debes consultar 4 columnas para meterlas en 4 columnas.
Si después vas a hacer una consulta sobre la tabla temporal, ahí podrías concatenar y todo lo que quieras.
Título: Re:SQL consulta
Publicado por: Mithrandir en Noviembre 09, 2012, 09:45:14 am
este procedimiento va a bajar un archivo plano para llenar una Interfaz que se manda a producción para devolver otro archivo plano para actualizar unas tablas y estas procesarlas con info actualizada,

la concatenación era asi +( ; ), +( ; ), etc etc etc 
Título: Re:SQL consulta
Publicado por: negroVeloz en Noviembre 09, 2012, 10:09:43 am
Es decir, a cada columna le quieres agregar el caracter ";" al final????
Título: Re:SQL consulta
Publicado por: Mithrandir en Noviembre 09, 2012, 10:16:47 am
Es decir, a cada columna le quieres agregar el caracter ";" al final????

sip para que el BCP cuando descargue la tabla se le indique que ; es el final de un campo
Título: Re:SQL consulta
Publicado por: negroVeloz en Noviembre 09, 2012, 10:18:37 am
Entonces la concatenación debería ser así:

select a + ";", b + ";", c + ";", d + ";" from........
Título: Re:SQL consulta
Publicado por: Mithrandir en Noviembre 09, 2012, 10:19:26 am
Entonces la concatenación debería ser así:

select a + ";", b + ";", c + ";", d + ";" from........

exacto asi esta hecho
Título: Re:SQL consulta
Publicado por: Tandersan en Noviembre 09, 2012, 10:20:19 am
este procedimiento va a bajar un archivo plano para llenar una Interfaz que se manda a producción para devolver otro archivo plano para actualizar unas tablas y estas procesarlas con info actualizada,

la concatenación era asi +( ; ), +( ; ), etc etc etc

Estimado, si desea agregar un punto y coma al final de cada línea, claro que es:

TEXTO + ;

Si es más de un campo en una consulta SELECT, es:

TEXTO + ; ,
TEXTO + ;

Si colocas

TEXTO + ; + TEXTO + ;

concatenas todo en una sola línea, lo que no es viable por cuanto tu tabla de destino tiene más de una columna. Las inserciones siempre son:

INSERT INTO TABLA_DESTINO (VALOR1, VALOR)
SELECT CAMPO1, CAMPO2 FROM TABLA_ORIGEN

Esto genera error:

INSERT INTO TABLA_DESTINO (VALOR1, VALOR)
SELECT CAMPO1 + CAMPO2 FROM TABLA_ORIGEN

Ahora, si tienes un texto de 4 caracteres, y lo insertas en un campo de largo 4, todo bien.
Si el texto tiene 4 caracteres y le concatenas un punto y coma, entonces el largo del campo debe ser cinco

CREATE TABLE1 ( CAMPO1 VARCHAR(4) )
-> SE PUEDE INSERTAR 'HOLA', 'CHAO'

Si quieres insertar 'HOLA+', 'CHAO+', entonces tabla debe ser
CREATE TABLE1 ( CAMPO1 VARCHAR(5) )
Título: Re:SQL consulta
Publicado por: negroVeloz en Noviembre 09, 2012, 10:24:05 am
Entonces, debería ser mas o menos como te indico en el spoiler, pero no se si contendrá otros errores, ya que no tengo las tablas como para probar.

[spoiler]INSERT INTO TEMPDB.GUEST.TSFM_SEG_CLI
select STUFF('000000000',09-DATALENGTH(RTRIM(PAR.PAR_RUT_PARTICIPE))+1, DATALENGTH(RTRIM(PAR.PAR_RUT_PARTICIPE)),RTRIM(PAR.PAR_RUT_PARTICIPE)) + ';',
      STUFF('0000',04-DATALENGTH(RTRIM(Age_agente))+1, DATALENGTH(RTRIM(Age_Agente)),RTRIM(Age_Agente))                                       + ';',
      STUFF('000',03-DATALENGTH(RTRIM(Suc_Sucursal))+1, DATALENGTH(RTRIM(Suc_Sucursal)),RTRIM(Suc_Sucursal))                                  + ';', 
      CONVERT(CHAR(19),STUFF('00000000000000000',18-DATALENGTH(RTRIM(ROUND(sum(CUO.Cuo_Saldo_Cuotas), 0)))+1,DATALENGTH(RTRIM(ROUND(SUM(CUO.Cuo_Saldo_Cuotas), 0))),RTRIM(ROUND(SUM(CUO.Cuo_Saldo_Cuotas), 0))))
from Fmu_Saldo_Cuotas CUO
   inner join  FMU_PARTICIPES PAR
   on PAR.Par_rut_Participe = CUO.Par_rut_Participe
where cuo_fecha = '20100331'
Group By PAR.Par_rut_Participe, Age_Agente, Suc_Sucursal[/spoiler]
Título: Re:SQL consulta
Publicado por: Tandersan en Noviembre 09, 2012, 10:24:13 am
Otra cosa, entiendo que estás formateando un número 123 para que quede como 0000123, de acuerdo a cierta cantidad de posiciones definidas como iniciales. Por ejemplo en el RUT definiste 18 posiciones, por ende:

1234567 se transforma en 000000000001234567

Creo recordar (solo creo) que SQL Server tiene la función RIGHT.

Si es así, puedes usarla como algo parecido a RIGHT('0000000000000000000000000000' + CAMPO, 18). Es más sencillo que STUFF en términos de codificación, si el resultado deseado es solo completar con ceros hacia la izquierda.
Título: Re:SQL consulta
Publicado por: Mithrandir en Noviembre 09, 2012, 10:26:46 am
Otra cosa, entiendo que estás formateando un número 123 para que quede como 0000123, de acuerdo a cierta cantidad de posiciones definidas como iniciales. Por ejemplo en el RUT definiste 18 posiciones, por ende:

1234567 se transforma en 000000000001234567

Creo recordar (solo creo) que SQL Server tiene la función RIGHT.

Si es así, puedes usarla como algo parecido a RIGHT('0000000000000000000000000000' + CAMPO, 18). Es más sencillo que STUFF en términos de codificación, si el resultado deseado es solo completar con ceros hacia la izquierda.

si correcto pero en el banco las funciones left o right esta un poco limitada en el banco
Título: Re:SQL consulta
Publicado por: negroVeloz en Noviembre 09, 2012, 13:26:12 pm
Y pudiste resolverlo?
Título: Re:SQL consulta
Publicado por: Mithrandir en Noviembre 09, 2012, 14:08:39 pm
Y pudiste resolverlo?

si señor, el procedimiento ya esta compilado y en produccion muchas gracias sres., ahora el hilo se transformara en chat. xD
Título: Re:SQL consulta
Publicado por: negroVeloz en Noviembre 09, 2012, 14:19:33 pm
si señor, el procedimiento ya esta compilado y en produccion muchas gracias sres., ahora el hilo se transformara en chat. xD
A que buena. Y cómo era?
 :thumbsup:
Título: Re:SQL consulta
Publicado por: Tandersan en Noviembre 09, 2012, 14:20:25 pm
A que buena. Y cómo era?
 :thumbsup:

Como decía yo pues, ¿te queda alguna duda?  :risa2: :risa2: :risa2: :risa2:
¡¡¡Empezó el chateo!!!  :zipynana:
Título: Re:SQL consulta
Publicado por: Comufacho en Noviembre 09, 2012, 14:20:52 pm
Le debes una UF a Tandersan, eso en pos de respetar el derecho de propiedad intelectual.  :diablo:
Título: Re:SQL consulta
Publicado por: Mithrandir en Noviembre 09, 2012, 14:41:30 pm
aca esta la solución, a futuro hay que cambiar la fecha pero eso queda para el release 2

[spoiler]IF EXISTS (   SELECT 1 FROM TEMPDB..SYSOBJECTS
      WHERE ID = OBJECT_ID(N'[TEMPDB].[GUEST].[TSFM_SEG_CLI]')
      AND   TYPE = 'U')
BEGIN
   DROP TABLE [TEMPDB].[GUEST].[TSFM_SEG_CLI]
END

select * from TEMPDB.GUEST.TSFM_SEG_CLI
CREATE TABLE TEMPDB.GUEST.TSFM_SEG_CLI (   
RUT VARCHAR(10),
Age_Agente varchar(4),
Suc_sucursal varchar(3),
Saldo_total Varchar(18))

INSERT INTO TEMPDB.GUEST.TSFM_SEG_CLI
select STUFF('000000000',09-DATALENGTH(RTRIM(PAR.PAR_RUT_PARTICIPE))+1, DATALENGTH(RTRIM(PAR.PAR_RUT_PARTICIPE)),RTRIM(PAR.PAR_RUT_PARTICIPE))+ ';',
      STUFF('0000',04-DATALENGTH(RTRIM(Age_agente))+1, DATALENGTH(RTRIM(Age_Agente)),RTRIM(Age_Agente))+ ';',
      STUFF('000',03-DATALENGTH(RTRIM(Suc_Sucursal))+1, DATALENGTH(RTRIM(Suc_Sucursal)),RTRIM(Suc_Sucursal))+ ';', 
      CONVERT(CHAR(19),STUFF('00000000000000000',18-DATALENGTH(RTRIM(ROUND(sum(CUO.Cuo_Saldo_Cuotas), 0)))+1,DATALENGTH(RTRIM(ROUND(SUM(CUO.Cuo_Saldo_Cuotas), 0))),RTRIM(ROUND(SUM(CUO.Cuo_Saldo_Cuotas), 0))))
from Fmu_Saldo_Cuotas CUO
   inner join  FMU_PARTICIPES PAR
   on PAR.Par_rut_Participe = CUO.Par_rut_Participe
where cuo_fecha = '20100331'
Group By PAR.Par_rut_Participe, Age_Agente, Suc_Sucursal
[/spoiler]