none
Union de tablas que no tienen la misma cantidad de columnas RRS feed

  • Pregunta

  • Amigos buenos dias , espero esten bien  , acudo a ud para ver si me pueden ayudar con el siguiente probles tengo una consulta ala bd la cual contiene una union de tablas   y estas me funciona bn , pero resulta que necesito anexar otra tabla pero esta no contiene  la misma cantidad de columnas para y me saca error , les comparte mi codigo

    CREATE PROC BusquedaProdctos
    @CodProd varchar(20),
    @CodClie varchar(50),
    @CodUbicacion varchar(10)
      AS
       BEGIN
    SELECT sp.CodProd AS Codigo,   
    [sp].[CodProd] as Referencia
                 , [sp].[Descrip]
                 , [sx].[Existen]
                 , [sdp].[Descrip] AS [Bodega]
                 , [SAT].[Monto]
    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
    where [sp].[CodProd] = @CodProd
    AND [SAT].[CodConv] = dbo.CODCONVENIO(@CodClie)
    AND [sdp].[CodUbic] = @CodUbicacion
     
    UNION 

    SELECT distinct SPART.CodProd AS Codigo,
    [spart].[CodAlte] as Referencia
    , [sp].[Descrip]
    , [sx].[Existen]
    , [sdp].[Descrip]AS Bodega
    , [stcv].[Monto]
    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
    WHERE [spart].[CodProd] = @CodProd 
      AND [stcv].[CodConv] = DBO.CODCONVENIO(@CodClie)
      AND [sdp].[CodUbic] = @CodUbicacion 

      UNION  aca hago la otro union de la tabla saserv

    select  CodServ as Codigo,
                      CodServ as Referencia,
                      Descrip, 
                      Precio1 as Monto
                      from SASERV
    where CodServ = @CodProd aca solo necesito el parametro codProd



     
    END; 


    Daniel

    viernes, 27 de marzo de 2020 15:30

Respuestas

  • Hola Dannycv012:

    Union tiene que devolver el mismo número y tipo de columnas, pero no quiere decir que no puedas devolver null, en las ausentes.

    CREATE PROC BusquedaProdctos
    @CodProd varchar(20),
    @CodClie varchar(50),
    @CodUbicacion varchar(10)
      AS
       BEGIN
    SELECT  sp.CodProd AS Codigo,   
    [sp].[CodProd] as Referencia
                 , [sp].[Descrip]
                 , [sx].[Existen]
                 , [sdp].[Descrip] AS [Bodega]
                 , [SAT].[Monto]
    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
    where [sp].[CodProd] = @CodProd
    AND [SAT].[CodConv] = dbo.CODCONVENIO(@CodClie)
    AND [sdp].[CodUbic] = @CodUbicacion
     
    UNION 
    
    SELECT distinct SPART.CodProd AS Codigo,
    [spart].[CodAlte] as Referencia
    , [sp].[Descrip]
    , [sx].[Existen]
    , [sdp].[Descrip]AS Bodega
    , [stcv].[Monto]
    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
    WHERE [spart].[CodProd] = @CodProd 
      AND [stcv].[CodConv] = DBO.CODCONVENIO(@CodClie)
      AND [sdp].[CodUbic] = @CodUbicacion 
    
      UNION  aca hago la otro union de la tabla saserv
    
    select  CodServ as Codigo,
                      CodServ as Referencia,
                      Descrip,
    				  NULL AS EXISTEN ,
    				  NULL AS [BODEGA],
                      Precio1 as Monto
                      from SASERV
    where CodServ = @CodProd 

    viernes, 27 de marzo de 2020 15:41
  • Hola Daniel, en vez de rellenar la consulta que tiene otra estructura con NULL, la puedes rellenar con lo que quieras, siempre que respete el tipo de datos que tiene que ir en esa columna, si existen es numérico puede ir 0, varios 0000 imagino que será un tipo string o cadena, y n/a tiene que ser otra cadena, pones eso en la columna, y ese sql te devolverá los datos que sean, y en esas columnas siempre pondrá los mismos datos, por ej N/A. Saludos.
    • Marcado como respuesta Dannycv012 lunes, 30 de marzo de 2020 0:47
    domingo, 29 de marzo de 2020 23:17

Todas las respuestas

  • Hola Dannycv012:

    Union tiene que devolver el mismo número y tipo de columnas, pero no quiere decir que no puedas devolver null, en las ausentes.

    CREATE PROC BusquedaProdctos
    @CodProd varchar(20),
    @CodClie varchar(50),
    @CodUbicacion varchar(10)
      AS
       BEGIN
    SELECT  sp.CodProd AS Codigo,   
    [sp].[CodProd] as Referencia
                 , [sp].[Descrip]
                 , [sx].[Existen]
                 , [sdp].[Descrip] AS [Bodega]
                 , [SAT].[Monto]
    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
    where [sp].[CodProd] = @CodProd
    AND [SAT].[CodConv] = dbo.CODCONVENIO(@CodClie)
    AND [sdp].[CodUbic] = @CodUbicacion
     
    UNION 
    
    SELECT distinct SPART.CodProd AS Codigo,
    [spart].[CodAlte] as Referencia
    , [sp].[Descrip]
    , [sx].[Existen]
    , [sdp].[Descrip]AS Bodega
    , [stcv].[Monto]
    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
    WHERE [spart].[CodProd] = @CodProd 
      AND [stcv].[CodConv] = DBO.CODCONVENIO(@CodClie)
      AND [sdp].[CodUbic] = @CodUbicacion 
    
      UNION  aca hago la otro union de la tabla saserv
    
    select  CodServ as Codigo,
                      CodServ as Referencia,
                      Descrip,
    				  NULL AS EXISTEN ,
    				  NULL AS [BODEGA],
                      Precio1 as Monto
                      from SASERV
    where CodServ = @CodProd 

    viernes, 27 de marzo de 2020 15:41
  • Javier hola hay alguna manera de que no sean null si no ponerles el valor que uno quiera por en existe de SASERV muestre 0000 Y en Bodega N/A ya que cuando voy a  a consultar desde visual me saca error

    Daniel

    domingo, 29 de marzo de 2020 19:26
  • Hola Daniel, en vez de rellenar la consulta que tiene otra estructura con NULL, la puedes rellenar con lo que quieras, siempre que respete el tipo de datos que tiene que ir en esa columna, si existen es numérico puede ir 0, varios 0000 imagino que será un tipo string o cadena, y n/a tiene que ser otra cadena, pones eso en la columna, y ese sql te devolverá los datos que sean, y en esas columnas siempre pondrá los mismos datos, por ej N/A. Saludos.
    • Marcado como respuesta Dannycv012 lunes, 30 de marzo de 2020 0:47
    domingo, 29 de marzo de 2020 23:17