Principales respuestas
Union de tablas que no tienen la misma cantidad de columnas

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
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
- Propuesto como respuesta Óscar NavarroModerator viernes, 27 de marzo de 2020 16:34
- Marcado como respuesta Dannycv012 domingo, 29 de marzo de 2020 19:19
-
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
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
- Propuesto como respuesta Óscar NavarroModerator viernes, 27 de marzo de 2020 16:34
- Marcado como respuesta Dannycv012 domingo, 29 de marzo de 2020 19:19
-
-
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