私はこのステートメントをやり直そうとしていますが、役に立たないです。SQL SUMとCASEとDISTINCT
Program Males Females Arts MalesAverage
---------------------------------------
Program 7 5 1 50.000000
これに伴う問題は、4人の男性と3人の女性だけがあるということです、と私はtblActivitesを追加するとき、重複を与えるように思われるもの:
SELECT b.Program AS Program,
SUM(CASE WHEN a.Gender LIKE 'M%' THEN 1 ELSE NULL END) AS Males,
SUM(CASE WHEN a.Gender LIKE 'F%' THEN 1 ELSE NULL END) AS Females,
SUM(CASE WHEN e.Activity LIKE 'Arts' THEN 1 ELSE NULL END) AS Arts,
AVG(CASE WHEN a.Gender LIKE 'M%' THEN CAST(f.Score AS DEC(10,2)) ELSE NULL END)
AS MalesAverage
FROM tblChildren a
LEFT JOIN tblInvolvement b ON b.ChildID = a.ChildID
LEFT JOIN tblActivities e ON e.ChildID = b.ChildID
LEFT JOIN tblScores f ON f.ChildID = b.ChildID
WHERE b.Place = 'Location'
AND b.Program = 'Program'
AND b.Year = '2009-10'
AND f.Assessment LIKE '%Pre%Assessment%'
AND e.StudentID = b.StudentID
GROUP BY Program
今、私のような結果が得られます。私は、アクティビティテーブルに12個のChildIDがあることに気付きました。なぜなら、その子供たちは複数のアクティビティに縛られていたからです。
SELECT SUM(DISTINCT CASE WHEN a.Gender LIKE 'M%' THEN 1 ELSE NULL END) AS Males
しかし、Males列の下では1を返したばかりです。どんな助けもありがとう。また、さらに明確にするために、テーブルはChildIDを介して一緒にキーイングされています。私は正しい情報を返すように助けてください。これが解決すれば、私の大量のリストが解決されます。私がたくさんのデータを持っているので、GROUP BYを避けることが望ましいです。
@niktrs適切な結果が4になる必要がある場合でも、まだ男性が7人います。 – jnewkirk
テーブルと結合の関係を確認してください。集計を使わずにクエリを実行し、結果が奇妙なものかどうかを確認します。 – niktrs