重複した値を避ける: -SQL ServerのMULTIPLE JOINは:私は私のデシベルで3つのテーブルを持っている
お客様:
CId | CName | CLocation | CJoinDate
お支払い方法:
TxnId | TxStatus | TxComment | TxAmount | CId | TxDate
予定:
AppId | AppCode | CId | ADate | AComment
2つのtablで左結合を行うと計算された結果が正しく表示されます。しかし、3つのテーブルを使って結合しようとすると、計算結果が間違っています。例えばのための
: -
私はこのクエリを試す場合は、算出した合計金額が正しい:上記のクエリで
SELECT c.CName, sum(p.TxAmount)
FROM Customer c LEFT JOIN Payment p ON c.CId = p.CId
WHERE p.TxStatus = 1
GROUP BY c.CName;
私はちょうど私に正しい結果を与える2つのテーブルを結合しています。
ここで、すべてのレコードを1つのテーブルに表示したいので、3つのテーブルを結合する必要がありました。以下 は、私が試したクエリです:
SELECT c.CName as Name, sum(p.TxAmount) as Payment, count(distinct a.ADate) as Total_Visit
FROM Customer c LEFT JOIN Payment p ON c.CId = p.CId LEFT JOIN Appointment a ON c.CId = a.CId
WHERE p.TxStatus = 1
GROUP BY c.CName;
上記のクエリは、各顧客のために私に間違ったお支払い金額を与えます。間違った結果が得られる理由は、各顧客の支払いテーブルと比較してAppointmentsテーブルの行数が増えたためです。したがって、すべての予定エントリを表示するには、支払い金額が重複して計算が間違ってしまうことがあります。
上記のシナリオを上記のクエリで修正するにはどうすればよいですか。
TKS
EDIT:実は、私は、各月のGROUP BY句と一緒に予定表に似参加する必要があり、2-3複数のテーブルをtheresの。
EDIT1:複数のCTEで修正されました。あなたの貴重な点をお寄せいただき、ありがとうございました。
実際には、複数のテーブルを結合しています。上記のクエリは大きな問題のほんの小さな問題です。だから私は物事を修正するためにJOINsでできることがあるかどうかを知りたかった。 – Villie
他のテーブルに対してもサブクエリを使用することができます。サブクエリーとPawelのCTEバリアントを使用してクエリを作成することを検討してください。実行計画のコストが最も低いものを使用しますか? –
GROUP BY句でCTEまたはサブクエリを使用することはできますか?特定の年の各月の合計を表示しています。 – Villie