Как я могу получить записи из нескольких разных таблиц в одном представлении в SQL Server 2008 R2? - PullRequest
0 голосов
/ 11 ноября 2010

Я пытаюсь создать своего рода «сводное» представление, в котором значения следует извлекать из нескольких разных таблиц ([Учетная запись], [Филиал], [Клиент], [Сотрудник], [Транзакция], [FlaggedTrans] ).

Поскольку я не могу выполнить несколько операторов SELECT в представлении, я пытаюсь выполнить задачу с помощью INNER JOINs, в этом и заключается моя проблема.

Вот что у меня так далеко:

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

Кажется достаточно логичным, но все значения возвращаются как NULL или 0. Что я делаю неправильно?

Ответы [ 3 ]

0 голосов
/ 11 ноября 2010

Я не совсем уверен, что здесь не так, но я могу порекомендовать вам закрыть ваши внутренние объединения одно за другим и выполнить свой запрос select, чтобы вы могли понять, какое внутреннее объединение вызывает проблему

0 голосов
/ 11 ноября 2010

Я бы начал с удаления CROSS JOIN и, при необходимости, поместил его в предложение where (например, WHERE My_ID IN (Выберите ID из ветви).

Кроме того, вам не нужно объединять таблицы, но выберите их один за другим в качестве столбцов в качестве другого параметра. Вот некоторый псевдокод:

SELECT
(SELECT COUNT(thisfield) FROM Thistable) as ThisCnt,
(SELECT COUNT(thatfield) FROM Thattable) as ThatCnt,
[etc.]
0 голосов
/ 11 ноября 2010

Вы можете использовать UNION ALL, если хотите построить свой вид в виде набора вариантов, где эти отдельные элементы выбора не связаны.

...