2010-11-11 21 views
0

Je tente de créer une sorte de vue "récapitulative", où les valeurs doivent provenir de plusieurs tables différentes ([Compte], [Branche], [Client], [Employé], [Transaction], [FlaggedTrans]) . Comme je ne peux pas faire un grand nombre d'instructions SELECT dans une vue, j'essaye d'accomplir la tâche en utilisant INNER JOINs, ce qui est mon problème.Comment puis-je extraire des enregistrements de plusieurs tables différentes dans une vue unique dans SQL Server 2008 R2?

Voici ce que j'ai jusqu'à présent:

CREATE VIEW Summary 
AS 
    SELECT NEWID() AS Summary_Id, 
    COUNT(C.Customer_Id) AS CustCount, 
    COUNT(A.Account_Id) AS AcctCount, 
    COUNT(T.Transaction_Id) AS TransCount, 
    COUNT(B.Branch_Id) AS BranchCount, 
    COUNT(E.Employee_Id) AS EmplCount, 
    CAST(SUM(A.Balance) AS INT) AS BalTotal, 
    COUNT(F.FlaggedTrans_Id) AS FlagCount 
    FROM dbo.Account A INNER JOIN 
    dbo.Customer C ON A.Customer_Id = C.Customer_Id INNER JOIN 
    dbo.Employee E ON A.Employee_Id = E.Employee_Id INNER JOIN 
    dbo.[Transaction] T ON A.Account_Id = T.Account_Id INNER JOIN 
    dbo.FlaggedTrans F ON E.Employee_Id = F.Employee_Id CROSS JOIN 
    dbo.Branch B 

semble assez logique, mais cela cause toutes les valeurs de revenir comme NULL ou 0. Qu'est-ce que je fais mal?

Répondre

0

Je commencerais par supprimer le CROSS JOIN, et si nécessaire, le mettre dans une clause where (comme WHERE My_ID IN (Sélectionner l'ID de la branche)

De même, vous n'avez pas besoin de joindre les tables, mais sélectionnez les un par un en tant que colonnes comme une autre option.Voici quelques pseudo-code:

SELECT 
(SELECT COUNT(thisfield) FROM Thistable) as ThisCnt, 
(SELECT COUNT(thatfield) FROM Thattable) as ThatCnt, 
[etc.] 
+0

Merci M ark, c'est exactement ce que j'avais besoin de faire, mais pour une raison quelconque, je négligeais de mettre (parenthèses) autour des sous-requêtes, ce qui provoquait évidemment des erreurs de SSMS. –

+0

Content d'aider Chris. –

0

Vous pouvez utiliser UNION ALL si vous souhaitez créer votre vue sous la forme d'une série de sélections dans lesquelles ces sélections uniques ne sont pas liées.

0

je ne suis pas vraiment sûr de ce qui ne va pas, mais je peux vous suggérer de fermer votre joint intérieur, un par un, et exécutez votre requête de sélection, de cette façon vous pouvez comprendre ce qui jointure interne est à l'origine du problème