2010-11-11 5 views
0

Я пытаюсь создать своего рода «сводный» вид, где значения должны извлекаться из нескольких разных таблиц ([Учетная запись], [Филиал], [Заказчик], [Сотрудник], [Транзакция], [ФлагТранс]). ,Как перенести записи из нескольких разных таблиц в один вид в SQL Server 2008 R2?

Поскольку я не могу сделать множество выражений 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. Что я делаю не так?

ответ

0

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

Кроме того, вам не нужно присоединяться к таблицам, но выберите Ниже приведены некоторые псевдокоды:

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

Thanks M ark, это именно то, что мне нужно было сделать, но по какой-то причине я пренебрегал помещением (круглыми скобками) вокруг подзапросов, что, очевидно, заставило SSMS выдавать ошибки. –

+0

Рад помочь Крису. –

0

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

0

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