Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Duas consultas em uma única tabela de resultados?


Para combinar duas consultas em uma tabela, você precisa do UNION Operação. Isso leva dois conjuntos de resultados e basicamente os cola juntos.
A união tem poucas restrições, e o mais importante é que é necessário que as consultas tenham o mesmo número de colunas.

Em suas consultas você tem um número diferente de colunas selecionadas, o credit_card_master as consultas têm 5 colunas cada, e o PG_NetBanking_Charges as consultas têm 4 colunas cada.

Pelo que posso ver, acho que o card_type coluna da primeira consulta não tem equivalente na segunda consulta, então você pode reescrever a 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 ...

Observe também que as colunas no conjunto de resultados terão os nomes das colunas da primeira consulta, portanto, convém adicionar um alias de coluna para obter um nome mais significativo/genérico para a coluna. Também costumo adicionar uma coluna "Source" que me permite rastrear a origem da linha na união, então minha consulta final ficaria assim:
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 o resultado terá as colunas Source , Name , Type , Ammount , AmmountType e PG_Type , onde Source será 1 para as linhas da primeira consulta e 2 para as linhas da segunda consulta.