2017-05-10 3 views
1

J'ai deux vues: TableA et TableB qui ont des informations très similaires les unes aux autres, mais il existe plusieurs colonnes uniques.SQL fusionner deux vues en une seule

Here are my two views and their table structure

Je voudrais que le résultat final look like this

Lorsque les colonnes d'origine: ID client, numéro de facture, vérifier la date, l'année et frais Description sont simplement empilés les uns sur les autres. Les colonnes: Type de charge, Montant facturé, Montant de responsabilité et Total sont également empilées les unes sur les autres, mais lorsqu'aucune valeur n'est présente dans la vue correspondante, elle est définie par défaut sur null (ou rien).

Je crois que ce que je dois faire est d'avoir certaines des colonnes (celles qui sont nommées identiquement) à union (?) Mais le reste à rester telles quelles et quand il n'y a pas de valeurs pour qu'elles soient remplies avec nulls (ou mieux encore, rien). J'essaye de les mettre dans une table afin que je puisse employer un tableau croisé dynamique de ma source de données unique (au lieu de deux sources de données séparées).

Désolé pour le mauvais formatage (j'ai utilisé des images car je ne pouvais pas comprendre comment utiliser correctement).

+0

Astuce: Utilisez 'JOINS' – Sami

Répondre

0

Vous pouvez utiliser UNION ALL pour renvoyer 2 requêtes en tant que jeu de résultats unique, si toutes les colonnes correspondent. Dans votre cas, vos colonnes ne correspondent pas complètement, mais vous affichez null pour toute incohérence de colonne - dans ce cas, vous pouvez simplement afficher null et le nom de la colonne. (Par exemple NULL comme 'Total')

SELECT ClientID, InvoiceNumber, CheckDate, Year, ChargeDescription, 
     NULL as 'ChargeType', NULL as 'Total', BilledAmount, LiabilityAMount 
FROM TABLEA 
UNION ALL 
SELECT ClientID, InvoiceNumber, CheckDate, Year, ChargeDescription, 
     ChargeType, Total, NULL as 'BilledAmount', NULL as 'LiabilityAmount' 
FROM TABLEB 
+0

Merci pour l'explication. Je n'étais pas conscient que vous pouviez simplement forcer une valeur NULL et utiliser UNION ALL. Cela a du sens pour moi maintenant. – Jordan

0

Vous pouvez créer vue comme ci-dessous:

create view yourview as 
    select clientid, [invoice number], [check date], [year], [Charge Description], Null as [Charge Type], Null as Total, [Billed Amount], [Liability Amount] from tableA 
    union all 
    select clientid, [invoice number], [check date], [year], [Charge Description],[Charge Type], Total, Null as [Billed Amount], Null as [Liability Amount] from tableB