Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Deux requêtes dans une seule table de résultats ?

Pour combiner deux requêtes dans une table, vous avez besoin de l'UNION opération. Cela prend deux ensembles de résultats et les colle ensemble.
Union a peu de restrictions, et le plus important est qu'il est nécessaire que les requêtes aient le même nombre de colonnes.

Dans vos requêtes, vous avez un nombre différent de colonnes sélectionnées, le credit_card_master les requêtes ont 5 colonnes chacune, et le PG_NetBanking_Charges les requêtes ont 4 colonnes chacune.

D'après ce que je peux voir, je suppose que le card_type la colonne de la première requête n'a pas d'équivalent dans la deuxième requête, vous pouvez donc réécrire la deuxième requête comme :

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 ...

Notez également que les colonnes du jeu de résultats prendront les noms des colonnes de la première requête, vous pouvez donc ajouter un alias de colonne pour obtenir un nom plus significatif/générique pour la colonne. De plus, j'ajoute généralement une colonne "Source" qui me permet de retracer l'origine de la ligne dans l'union, donc ma requête finale ressemblerait à :

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 ...

et le résultat aura les colonnes Source , Name , Type , Ammount , AmmountType et PG_Type , où Source sera 1 pour les lignes de la première et 2 pour les lignes de la deuxième requête.