Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Due query in un'unica tabella dei risultati?

Per combinare due query in una tabella, è necessario UNION operazione. Ciò richiede due set di risultati e sostanzialmente li incolla insieme.
L'unione ha poche restrizioni e la più importante è che è necessario che le query abbiano lo stesso numero di colonne.

Nelle tue query hai selezionato un numero diverso di colonne, il credit_card_master le query hanno 5 colonne ciascuna e PG_NetBanking_Charges le query hanno 4 colonne ciascuna.

Da quello che posso vedere, immagino che il card_type la colonna della prima query non ha equivalenti nella seconda query, quindi puoi riscrivere la seconda query come:

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

Nota inoltre che le colonne nel set di risultati prenderanno i nomi delle colonne dalla prima query, quindi potresti voler aggiungere un alias di colonna per ottenere un nome più significativo/generico per la colonna. Inoltre, di solito aggiungo una colonna "Sorgente" che mi consente di tracciare l'origine della riga nell'unione, quindi la mia query finale sarebbe simile a:

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

e il risultato avrà le colonne Source , Name , Type , Ammount , AmmountType e PG_Type , dove Source sarà 1 per le righe della prima e 2 per le righe della seconda query.