0

ある種の「要約」ビューを作成しようとしています。このビューでは、値をいくつかの異なるテーブル([Account]、[Branch]、[Customer]、[Employee]、[Transaction]、[FlaggedTrans])から取得する必要があります。

ビュー内で多数のSELECTステートメントを実行できないため、問題が存在するINNERJOINを使用してタスクを実行しようとしています。

これが私がこれまでに得たものです:

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として返される原因になっています。何が間違っているのでしょうか。

4

3 に答える 3

0

単一の選択が関連していない多数の選択としてビューを構築する場合は、UNIONALLを使用できます。

于 2010-11-11T20:11:56.577 に答える
0

ここで何が問題なのかはよくわかりませんが、内部結合を1つずつ閉じて、selectクエリを実行することをお勧めします。そうすれば、どの内部結合が問題を引き起こしているのかを特定できます。

于 2010-11-11T20:13:15.660 に答える
0

まず、CROSS JOINを削除し、必要に応じて、where句(WHERE My_ID IN(ブランチからIDを選択)など)に配置します。

また、テーブルを結合する必要はありませんが、別のオプションとして、テーブルを1つずつ列として選択します。ここにいくつかの擬似コードがあります:

SELECT
(SELECT COUNT(thisfield) FROM Thistable) as ThisCnt,
(SELECT COUNT(thatfield) FROM Thattable) as ThatCnt,
[etc.]
于 2010-11-11T20:52:04.070 に答える