case文のincidentdateがgroup byまたはaggregate関数の一部ではないため、このSQLは失敗しています。私が事故でグループ化した場合、集計関数は無駄になります。なぜなら、それは時間の差異ごとに別々の行を持つからです。集計関数を使用したクエリにcase文を組み込む方法
私がしたいのは、そのケースステートメントの結果、つまり「Days」または「Nights」でグループ化することです。一時的なテーブルにデータを入れてからtempから選択するというかなりのゴミ解決策がありますテーブルには集計関数が含まれていますが、私はよりよい方法が必要であると信じています。
論理的にはhaving節に似ていますが、selectでは使用すると思われます。
SELECT
d.DeptName,
CASE
WHEN DATEPART(hh, nmm.incidentdate) < 6 OR
DATEPART(hh, nmm.incidentdate) >= 18
THEN 'Nights'
WHEN DATEPART(hh, nmm.incidentdate) >= 6 AND
DATEPART(hh, nmm.incidentdate) < 18
THEN 'Days'
END AS [Shift],
COUNT(nmm.ReferenceNo)
FROM
NearMissesMain nmm
INNER JOIN
Departments d ON d.DepartmentID = nmm.reporterdepartment
WHERE
nmm.DepartmentID = 1
GROUP BY
d.DeptName
ありがとうこれは動作し、一時テーブルを使用して保存..ありがとう!私はサブクエリなしでこれを行うより洗練された方法があるかもしれないと考えていたが、これを受け入れるだろう。 –
あなたはグループの中のcaseステートメントを潜在的に使うことができます。それは、導かれた表を避けるでしょう。 – Leonidas199x