none
COMO QUITAR O AUMENTAR CEROS EN SQL SERVER 2005 RRS feed

  • Pregunta

  • Buenos días , estoy haciendo un join de dos tablas , en esta  línea

     left outer joim  dbo.WH_ItemMast AS WHIT ON WHIT.Item = T.ItemCodigo LEFT OUTER JOIN..
    

    Pero no lo hace de manera correcta porque un campo lo rcupera asi

    T.ItemCodigo=006001         y el otro

    es asi WHIT.Item =0000006001      

    como puedo solucioar el problema.

    Salduos.   

    miércoles, 19 de enero de 2011 14:52

Respuestas

  • Tremendo embrollo.

    Bueno.

    Paso 1 : Establecer la dimencion longitud del campo.

    campo de X Longitud iguales para ambos campos.

    Paso 2 : Establecer formato de campo iguales para ambos campos si no guardan un minimo de igualdad no corresponderia al mismo tipo de informacion.

    En tu caso seria.

    T.ItemCodigo=006001         y el otro

    es asi WHIT.Item =0000006001   

    1. Establecer y estar seguro que se cumple que son 6 caracteres de longitud los que vas a igualar en ambos campos.

    2 . Establecer que siempre seran los 6 ultimos caracteres de la derecha por la cual definiras la igualdad que no importa lo de la izquierda o ceros a la izquierda.

    Entonces seria:

    left outer joim  dbo.WH_ItemMast AS WHIT ON
    right('000000000' + T.ItemCodigo,6) = right('000000000' + WHIT.Item ,6) LEFT OUTER JOIN..

    ETC ETC ..

    Tambien podria ser :

    left outer joim  dbo.WH_ItemMast AS WHIT ON
    right('000000000' + rtrim(ltrim(T.ItemCodigo)),6) = right('000000000' + ltrim(rtrim(WHIT.Item)),6)LEFT OUTER JOIN..

     Espero me haya dejado entender.

    saludos

    Rolando Lau

     

    miércoles, 19 de enero de 2011 20:26

Todas las respuestas

  • Buenos dias.

    Te recomiendo lo siguiente :

    left outer joim  dbo.WH_ItemMast AS WHIT ON
    right('000000000' + T.ItemCodigo,10) = WHIT.Item
    LEFT OUTER JOIN..

    ETC ETC ..

    Tambien podria ser :

    left outer joim  dbo.WH_ItemMast AS WHIT ON
    right('000000000' + rtrim(ltrim(T.ItemCodigo)),10) = WHIT.Item
    LEFT OUTER JOIN..

    Espero te halla servido

    Saludos

    Rolando Lau

    miércoles, 19 de enero de 2011 15:00
  • Hola y dime , como podria hacer para quitarle los ceros de la izquierda a ambos campos ya que en realidad el numero de ceros adelante varia.

    Saludos.

    miércoles, 19 de enero de 2011 15:52
  • Hola estuve tratando de usar el metodo

    Declare @numeroConCeros varchar(10) = '0000445554'
    
    Select CAST(CAST(@numeroConCeros AS INT) AS VARCHAR(10))
    
    

    en mi vista

    SELECT  COD.ClienteNumero AS codigo, PER.NombreCompleto AS nombre, ISNULL(WHCL.DescripcionLocal, 'OTROS') AS LINEA, 
          SUM(CASE WHEN T .TIPODOCUMENTO NOT IN ('ND') THEN T .MONTO ELSE 0.00 END) AS TOTAL_LINEA, 
          SUM(CASE WHEN T .TIPODOCUMENTO = 'ND' THEN T .MONTO ELSE 0.00 END) AS NOTA_DEBITO, ISNULL(SUM(T.NOTA_CREDITO), 0) 
          AS NOTA_CREDITO, 1000 AS POTENCIAL, SUM(CASE WHEN T .TIPODOCUMENTO NOT IN ('ND') THEN MONTO ELSE 0.00 END) 
          - 1000 AS DIFERENCIA
    FROM   (SELECT  Monto, TipoDocumento, NumeroDocumento, ItemCodigo, CASE WHEN DOCDET.TIPODOCUMENTO IN ('NC') AND 
                DOCDET.ITEMCODIGO IN
                 (SELECT  DOC.ITEMCODIGO
                 FROM   CO_DocumentoDETALLE DOC
                 WHERE  DOC.TIPODOCUMENTO = 'NC' AND DOC.ITEMCODIGO NOT IN
                        (SELECT  isNull(ITEM, 0)
                         FROM   WH_ITEMMAST)) THEN docdet.MONTO ELSE 0.00 END AS NOTA_CREDITO
          FROM   dbo.CO_DocumentoDetalle AS DOCDET) AS T LEFT OUTER JOIN
          dbo.WH_ItemMast AS WHIT ON CAST(CAST(WHIT.Item AS INT) AS VARCHAR(10)) = CAST(CAST(T.ItemCodigo AS INT) AS VARCHAR(10)) 
          LEFT OUTER JOIN
          dbo.WH_ClaseLinea AS WHCL ON WHIT.Linea = WHCL.Linea LEFT OUTER JOIN
          dbo.CO_Documento AS COD ON COD.NumeroDocumento = T.NumeroDocumento AND COD.TipoDocumento = T.TipoDocumento LEFT OUTER JOIN
          dbo.PersonaMast AS PER ON PER.Persona = COD.ClienteNumero LEFT OUTER JOIN
          dbo.V_ITEMCODIGO_OK1 AS V ON T.ItemCodigo = V.ItemCodigo
    GROUP BY COD.ClienteNumero, PER.NombreCompleto, WHCL.DescripcionLocal
    
    pero me vota el error

     

    Msg 245, Level 16, State 1, Line 1

    Conversion failed when converting the varchar value 'ADL001 ' to data type int.

    y esque algunos codigos empiezan asi con letras.

    Como podria solucinarlo.

    Saludos.

    miércoles, 19 de enero de 2011 16:51
  • Hola lo probé pero salen mas registros de los que salian antes, asi lo hice..

    SELECT   
    COD.ClienteNumero AS codigo,cod.numerodocumento, PER.NombreCompleto AS nombre, 
    ISNULL(WHCL.DescripcionLocal, 'OTROS') AS LINEA, 
     SUM(CASE WHEN T .TIPODOCUMENTO NOT IN ('ND') THEN T .MONTO ELSE 0.00 END) AS TOTAL_LINEA, 
     SUM(CASE WHEN T .TIPODOCUMENTO = 'ND' THEN T .MONTO ELSE 0.00 END) AS NOTA_DEBITO, ISNULL(SUM(T.NOTA_CREDITO), 0) 
     AS NOTA_CREDITO, 1000 AS POTENCIAL, SUM(CASE WHEN T .TIPODOCUMENTO NOT IN ('ND') THEN MONTO ELSE 0.00 END) 
               - 1000 AS DIFERENCIA
    FROM     (SELECT   Monto, TipoDocumento, NumeroDocumento, ItemCodigo, CASE WHEN DOCDET.TIPODOCUMENTO IN ('NC') AND 
                           DOCDET.ITEMCODIGO IN
                             (SELECT   DOC.ITEMCODIGO
                              FROM     CO_DocumentoDETALLE DOC
                              WHERE   DOC.TIPODOCUMENTO = 'NC' AND DOC.ITEMCODIGO NOT IN
                                            (SELECT   isNull(ITEM, 0)
                                             FROM     WH_ITEMMAST)) THEN docdet.MONTO ELSE 0.00 END AS NOTA_CREDITO
                FROM     dbo.CO_DocumentoDetalle AS DOCDET) AS T LEFT OUTER JOIN
               dbo.WH_ItemMast AS WHIT ON right(WHIT.Item, len(WHIT.Item)+1 - patindex('%[^0]%', WHIT.Item))= right(T.ItemCodigo, len(T.ItemCodigo)+1 - patindex('%[^0]%', T.ItemCodigo)) LEFT OUTER JOIN
             dbo.WH_ClaseLinea AS WHCL ON WHIT.Linea = WHCL.Linea LEFT OUTER JOIN
             dbo.CO_Documento AS COD ON COD.NumeroDocumento = T.NumeroDocumento AND COD.TipoDocumento = T.TipoDocumento LEFT OUTER JOIN
               dbo.PersonaMast AS PER ON PER.Persona = COD.ClienteNumero LEFT OUTER JOIN
               dbo.V_ITEMCODIGO_OK1 AS V ON T.ItemCodigo = V.ItemCodigo
    where PER.NombreCompleto like '%cempro tech%'
    GROUP BY COD.ClienteNumero, PER.NombreCompleto, WHCL.DescripcionLocal,cod.numerodocumento
    
     
    
    
    Saludos.
    miércoles, 19 de enero de 2011 18:45
  • Tremendo embrollo.

    Bueno.

    Paso 1 : Establecer la dimencion longitud del campo.

    campo de X Longitud iguales para ambos campos.

    Paso 2 : Establecer formato de campo iguales para ambos campos si no guardan un minimo de igualdad no corresponderia al mismo tipo de informacion.

    En tu caso seria.

    T.ItemCodigo=006001         y el otro

    es asi WHIT.Item =0000006001   

    1. Establecer y estar seguro que se cumple que son 6 caracteres de longitud los que vas a igualar en ambos campos.

    2 . Establecer que siempre seran los 6 ultimos caracteres de la derecha por la cual definiras la igualdad que no importa lo de la izquierda o ceros a la izquierda.

    Entonces seria:

    left outer joim  dbo.WH_ItemMast AS WHIT ON
    right('000000000' + T.ItemCodigo,6) = right('000000000' + WHIT.Item ,6) LEFT OUTER JOIN..

    ETC ETC ..

    Tambien podria ser :

    left outer joim  dbo.WH_ItemMast AS WHIT ON
    right('000000000' + rtrim(ltrim(T.ItemCodigo)),6) = right('000000000' + ltrim(rtrim(WHIT.Item)),6)LEFT OUTER JOIN..

     Espero me haya dejado entender.

    saludos

    Rolando Lau

     

    miércoles, 19 de enero de 2011 20:26