none
order by desc y Formato moneda a uno campo RRS feed

  • Pregunta

  • Amigos buenas noches , espero me puedan ayudar , tengo una consulta sql la cual  me trae informacion de varias tablas  ,  pero resulta que tabla sapart tiene una columna que se llama ClassID   , esta consulta debe llamar tambien  este campo para que me ordene los datos de sapar en forma descendente  y asi  el orden que me traiga llevarlo a una tabla en asp.net ., tambien como puedo darle formato moneda  al campo  Monto , ya he intentando de varias formas pero me genera error , como  seria la forma mas recomendable de realizar esta operación.Muchas gracias de ante mano.

    CREATE PROC BusquedaProdctos
    @CodProd nvarchar(50),
    @CodClie varchar(50),
    @CodUbicacion varchar(10)
      AS
       BEGIN
    SELECT sp.CodProd AS Codigo,   
    [sp].[CodProd] as Referencia
                 , sp.Descrip+' '+ case  when sp.Descrip3 is NULL then '' ELSE +' Reg.Inv '+ sp.Descrip3 end AS Descrip
                  ,convert(int, [sx].[Existen] )AS Existen
                 , [sdp].[Descrip] AS [Bodega]
    , 0 as Cantidad
                 , CASE WHEN sp.CodInst = Sint.CodInst THEN 0.000 ELSE sat.Monto END AS Monto
    , 1 AS ClassID


    FROM
    SAPROD as sp
    left JOIN SAEXIS as sx on sp.CodProd = sx.CodProd
    left JOIN SADEPO as sdp on sx.CodUbic = sdp.CodUbic
    left JOIN SAITCV AS SAT ON sp.CodProd = sat.CodItem
        left join SACLIE as SC ON SAT.CodConv = SC.CodConv
    left join SAINSTA as sint ON sp.CodInst = sint.InsPadre
    where [sp].[CodProd] = @CodProd
    AND [SAT].[CodConv] = dbo.CODCONVENIO(@CodClie) 
    AND [sdp].[CodUbic] = @CodUbicacion

    UNION 

    SELECT distinct SPART.CodProd AS Codigo, Esta seleccion es la que deben llevar el ClassID y Order by desc
    [spart].[CodAlte] as Referencia
    ,  sp.Descrip+' '+ case  when 
    sp.Descrip3 is NULL then '' 
    ELSE+' Reg.Inv '+  sp.Descrip3 end AS Descrip
    ,convert(int, [sx].[Existen])AS Existen
    , [sdp].[Descrip]AS Bodega
    ,convert(int,spart.Cantidad)
    ,CASE WHEN sp.CodInst = Sint.CodInst THEN 0.000 ELSE stcv.Monto END AS Monto
    ,  spart.ClassID

    FROM 
    SAPART as spart
        left join SAPROD as sp on spart.CodAlte = sp.CodProd
            left join SAEXIS as sx on spart.CodAlte = sx.CodProd
            left join SADEPO as sdp on sx.CodUbic = sdp.CodUbic
            left join saitcv as stcv on sp.CodProd = stcv.CodItem
            left join SACLIE as sc on stcv.CodConv = sc.CodConv
    left join SAINSTA as sint ON sp.CodInst = sint.InsPadre
    WHERE [spart].[CodProd] = @CodProd 
      AND [stcv].[CodConv] = DBO.CODCONVENIO(@CodClie)
      AND [sdp].[CodUbic] = @CodUbicacion 
        

      UNION


    select  CodServ as Codigo ,
                      CodServ as Referencia,
                      Descrip,
      0000 AS EXISTEN ,
      'N/A' AS [BODEGA],
      0 as Cantidad,
                      Precio1 as Monto,
      1 AS  ClassID 
                      from SASERV
    where CodServ = @CodProd


     
    END; 

    go


    Daniel

    sábado, 6 de junio de 2020 3:37

Respuestas

Todas las respuestas

  • Hola Daniel:

    Para utilizar order by en una consulta con Union, tienes que meter el conjunto a enlazar dentro de una tabla derivada.

    CREATE PROC BusquedaProdctos
    @CodProd nvarchar(50),
    @CodClie varchar(50),
    @CodUbicacion varchar(10)
      AS
       BEGIN
    SELECT   sp.CodProd AS Codigo,   
    		[sp].[CodProd] as Referencia, 
    		sp.Descrip+' '+ case  when sp.Descrip3 is NULL 
    							then '' ELSE +' Reg.Inv '+ sp.Descrip3 end AS Descrip,
    		convert(int, [sx].[Existen] )AS Existen, 
    		[sdp].[Descrip] AS [Bodega], 
    		0 as Cantidad, 
    		CASE WHEN sp.CodInst = Sint.CodInst 
    			THEN 0.000 ELSE sat.Monto END AS Monto,
    		1 AS ClassID
    FROM
    		SAPROD as sp
    		left JOIN SAEXIS as sx on sp.CodProd = sx.CodProd
    		left JOIN SADEPO as sdp on sx.CodUbic = sdp.CodUbic
    		left JOIN SAITCV AS SAT ON sp.CodProd = sat.CodItem
    		left join SACLIE as SC ON SAT.CodConv = SC.CodConv
    		left join SAINSTA as sint ON sp.CodInst = sint.InsPadre
    	where [sp].[CodProd] = @CodProd
    		AND [SAT].[CodConv] = dbo.CODCONVENIO(@CodClie) 
    		AND [sdp].[CodUbic] = @CodUbicacion
    
    UNION 
    SELECT * FROM (
    	SELECT distinct SPART.CodProd AS Codigo, --Esta seleccion es la que deben llevar el ClassID y Order by desc
    					[spart].[CodAlte] as Referencia,  
    					sp.Descrip+' '+ case  when sp.Descrip3 is NULL 
    											then '' 
    									ELSE+' Reg.Inv '+  sp.Descrip3 end AS Descrip,
    					convert(int, [sx].[Existen])AS Existen, 
    					[sdp].[Descrip]AS Bodega,
    					convert(int,spart.Cantidad),
    					CASE WHEN sp.CodInst = Sint.CodInst THEN 0.000 ELSE stcv.Monto END AS Monto,  
    					spart.ClassID
    	FROM 
    			SAPART as spart
    			left join SAPROD as sp on spart.CodAlte = sp.CodProd
    	        left join SAEXIS as sx on spart.CodAlte = sx.CodProd
    	        left join SADEPO as sdp on sx.CodUbic = sdp.CodUbic
    	        left join saitcv as stcv on sp.CodProd = stcv.CodItem
    	        left join SACLIE as sc on stcv.CodConv = sc.CodConv
    			left join SAINSTA as sint ON sp.CodInst = sint.InsPadre
    		WHERE [spart].[CodProd] = @CodProd 
    			AND [stcv].[CodConv] = DBO.CODCONVENIO(@CodClie)
    			AND [sdp].[CodUbic] = @CodUbicacion 
    		ORDER BY Descrip -- Supongo que Descrip
    		) AS Derivada
        
    
      UNION
    
    
    select  CodServ as Codigo ,
            CodServ as Referencia,
            Descrip,
    		0000 AS EXISTEN ,
    		'N/A' AS [BODEGA],
    		0 as Cantidad,
            Precio1 as Monto,
    		1 AS  ClassID 
    from SASERV
    	where CodServ = @CodProd
    
    
     
    END; 
    
    go

    Tablas derivadas

    https://javifer2.wordpress.com/2019/11/06/tabla-derivada/

    En cuanto al formato. 

    Qué tipo de dato tienes, y que salida esperas??? 

    Te pongo un ejemplo de como se puede formatear a moneda.

    declare @num float = 156.16565
    select FORMAT(@num,'C','es-es') as CurrencyEs, FORMAT(@num,'C','en-us') as CurrencyEn

    Format

    https://docs.microsoft.com/es-es/sql/t-sql/functions/format-transact-sql?view=sql-server-ver15

    sábado, 6 de junio de 2020 4:16
  •   

    ¿Alguna novedad sobre la consulta realizada? ¿Ha sido útil la respuesta proporcionada?  

     

    Gracias por usar los foros de MSDN.

    martes, 9 de junio de 2020 13:33
    Moderador