2010-01-18 8 views
1

Je veux créer une vue qui combine les données de deux tables, les exemples de données dans chaque tableau sont comme ci-dessous.Comment créer une vue combinant plusieurs lignes à partir de deux tables?

SELECT commande pour TableA

SELECT [ID], [Date], [SUM] 
FROM TableA 

Résultat

ID | Date  | SUM 
1  | 1/1/2010 |  2 
1  | 1/2/2010 |  4 
3  | 1/3/2010 |  6 

SELECT commande pour TableB

SELECT [ID], [Date], [SUM] 
FROM TableB 

Résultat

ID | Date  | SUM 
1  | 1/1/2010 |  5 
1  | 2/1/2010 |  3 
1  | 31/1/2010 |  2 
2  | 1/2/2010 |  20 

Je veux sortie comme ci-dessous

ID | Date  | SUMA  |  SUMB 
1  | 1/1/2010 |  2  |  10 
1  | 1/2/2010 |  4  |  0 
2  | 1/2/2010 |  0  |  20 
3  | 1/3/2010 |  6  |  0 

Comment puis-je faire sur SQL Server 2005?

Les informations sur la date peuvent varier, comme modifié dans le tableau.

+0

Vous devrez peut-être expliquer comment vous arrivez avec ces résultats ... ce n'est pas immédiatement évident. –

Répondre

2

Essayez cette ...

SELECT 
ISNULL(TableA.ID, TableB.ID) ID, 
ISNULL(TableA.Date, TableB.Date), 
ISNULL(TableA.Sum,0) SUMA, 
ISNULL(TableB.Sum, 0) SUMB 
FROM 
TableA FULL OUTER JOIN TableB 
ON TableA.ID = TableB.ID AND TableA.Date = TableB.Date 
ORDER BY 
ID 

A full outer join est ce que vous avez besoin parce que vous voulez inclure les résultats des deux tables, qu'il y ait correspondance ou non.

0

Je habituellement union les deux requêtes ensemble, puis de les regrouper comme ceci:

SELECT ID, [Date], SUM(SUMA) As SUMA, SUM(SUMB) AS SUMB 
FROM (
    SELECT ID, [Date], SUMA, 0 AS SUMB 
    FROM TableA 
    UNION ALL 
    SELECT ID, [Date], 0 As SUMA, SUMB 
    FROM TableB 
    ) 
GROUP BY ID, [Date] 
0
SELECT 
    ISNULL(a.ID, b.ID) AS ID, 
    ISNULL(a.Date, b.Date) AS Date, 
    ISNULL(a.SUM, 0) AS SUMA, 
    ISNULL(b.SUM, 0) AS SUMB, 
FROM 
    TableA AS a 
    FULL JOIN 
    TableB AS b 
    ON a.ID = b.ID 
    AND a.Date = b.Date; 
0

Ce n'est pas évident comment vous voulez combiner les deux tables. Je pense que c'est ce que vous cherchez, mais pouvez-vous confirmer s'il vous plaît?

  1. TableA.Date est le champ le plus important; Si une date donnée apparaît dans la TableA, elle sera incluse dans la vue, mais pas si elle se produit uniquement dans la TableB.
  2. Si une date contient des enregistrements dans la TableA et la TableB et que les enregistrements ont un ID correspondant, ils sont combinés en une ligne dans la vue avec SUMA provenant de TableA.Sum et SUMB étant TableA.Sum * TableB.Sum (par exemple Date : 01/01/2010, ID: 1) (par exemple Date: 01/03/2010 ID: 3).
  3. Si une date a des dossiers dans TableA et TableB avec des ID différents, le point de vue d'inclure ces dossiers séparément sans multiplier les valeurs du tout Somme (date 02/01/2010, ID: 1 et ID: 2)
Questions connexes