sql >> Base de Datos >  >> RDS >> Sqlserver

¿Dos consultas en una sola tabla de resultados?

Para combinar dos consultas en una tabla, necesita UNION operación. Eso toma dos conjuntos de resultados y básicamente los une.
La unión tiene pocas restricciones, y la más importante es que es necesario que las consultas tengan la misma cantidad de columnas.

En sus consultas, tiene un número diferente de columnas seleccionadas, el credit_card_master las consultas tienen 5 columnas cada una, y los PG_NetBanking_Charges las consultas tienen 4 columnas cada una.

Por lo que puedo ver, supongo que el card_type la columna de la primera consulta no tiene equivalente en la segunda consulta, por lo que podría reescribir la segunda consulta como:

SELECT card_name, card_type, charge_amount, B2C_Amount_type, PGM.PG_Type 
  FROM ...
  WHERE ...
UNION
SELECT PGM.Payment_Gateway_Name, null, PGNBC.Online_DC_Charge_Amt,
       PGNBC.Online_DC_Charge_type, PGM.PG_Type
  FROM ...
  WHERE ...

También tenga en cuenta que las columnas en el conjunto de resultados tomarán los nombres de las columnas de la primera consulta, por lo que es posible que desee agregar un alias de columna para obtener un nombre más significativo/genérico para la columna. También suelo agregar una columna "Fuente" que me permite rastrear el origen de la fila en la unión, por lo que mi consulta final se vería así:

SELECT 1 as Source, card_name as Name, card_type as Type, 
       charge_amount as Ammount, B2C_Amount_type as AmmountType,
       PGM.PG_Type as PG_Type
  FROM ...
  WHERE ...
UNION
SELECT 2, PGM.Payment_Gateway_Name, null, PGNBC.Online_DC_Charge_Amt,
       PGNBC.Online_DC_Charge_type, PGM.PG_Type
  FROM ...
  WHERE ...

y el resultado tendrá las columnas Source , Name , Type , Ammount , AmmountType y PG_Type , donde Source será 1 para las filas de la primera y 2 para las filas de la segunda consulta.