Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Zwei Abfragen in einer einzigen Ergebnistabelle?

Um zwei Abfragen in einer Tabelle zu kombinieren, benötigen Sie die UNION Betrieb. Das nimmt zwei Ergebnismengen und klebt sie im Grunde zusammen.
Union hat wenige Einschränkungen, und die wichtigste ist, dass es notwendig ist, dass die Abfragen die gleiche Anzahl von Spalten haben.

In Ihren Abfragen haben Sie eine andere Anzahl von Spalten ausgewählt, den credit_card_master Abfragen haben jeweils 5 Spalten und die PG_NetBanking_Charges Abfragen haben jeweils 4 Spalten.

Soweit ich sehen kann, schätze ich, dass der card_type Spalte aus der ersten Abfrage hat keine Entsprechung in der zweiten Abfrage, sodass Sie die zweite Abfrage umschreiben könnten als:

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

Beachten Sie auch, dass die Spalten in der Ergebnismenge die Namen der Spalten aus der ersten Abfrage übernehmen, sodass Sie möglicherweise einen Spaltenalias hinzufügen möchten, um einen aussagekräftigeren/allgemeineren Namen für die Spalte zu erhalten. Außerdem füge ich normalerweise eine "Quelle"-Spalte hinzu, die es mir ermöglicht, den Ursprung der Zeile in der Vereinigung zu verfolgen, sodass meine letzte Abfrage wie folgt aussehen würde:

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

und das Ergebnis hat die Spalten Source , Name , Type , Ammount , AmmountType und PG_Type , wobei Source ist 1 für Zeilen aus der ersten und 2 für Zeilen aus der zweiten Abfrage.