複数のcaseステートメントを含むクエリがありますが、それらを1行に表示し、各caseステートメント内の修飾子でグループ化しないようにします。時間は時間の列にマークされていますが、ST時間とOT時間のどちらであるかを示すために少しあります
caseステートメントの前にsumまたはmaxを付けようとしましたが、エラーが発生します。「集計またはサブクエリを含む式で集計関数を実行できません」
declare @StartDate as date
declare @EndDate as date
set @StartDate = '7/1/2019'
set @EndDate = '7/31/2019'
SELECT js.City,
ro.Name,
--sum(case when hw.overtime = 0 then SUM(hw.Hours) else 0 end) AS STHoursworked,
(case when hw.overtime = 0 then SUM(hw.Hours) else 0 end) AS STHoursworked,
--sum(case when hw.overtime = 1 then SUM(hw.Hours) else 0 end) AS OTHoursworked,
(case when hw.overtime = 1 then SUM(hw.Hours) else 0 end) AS OTHoursworked,
sum(hw.hours) as TotalHours
FROM Manager.HoursInvoiced AS hw INNER JOIN
Manager.PayrollRecord AS pr ON hw.PayrollEntityOID = pr.EntityOID INNER JOIN
Manager.ClientAccounts AS ca ON pr.AccountEntityOID = ca.EntityOID INNER JOIN
Manager.Clients AS c ON ca.ClientEntityOID = c.EntityOID INNER JOIN
Manager.Assignments AS ass ON pr.AssignmentEntityOID = ass.EntityOID INNER JOIN
Manager.JobSites AS js ON ass.JobSiteEntityOID = js.EntityOID INNER JOIN
Manager.Role AS ro ON ass.RoleEntityOID = ro.EntityOID
WHERE (c.EntityOID = 'D6F3BC50-B60E-4DA4-9F3E-DACE78FD0EE2') AND (hw.WorkDate BETWEEN @StartDate AND @EndDate)
GROUP BY hw.Overtime,
js.city,
ro.Name
order by js.City,ro.Name
Conroe / AdministrativeのSTHoursとOTHoursを同じ行に配置したいと思います。group byを削除できず、caseステートメントの前でmax関数またはsum関数を使用できません。
メッセージ8120、レベル16、状態1、行10の列 'Manager.HoursInvoiced.Overtime'は、集計関数にもGROUP BY句にも含まれていないため、選択リストでは無効です。
必要なのは、合計内のcase
式です。最下位レベルのグループに残業タイプと非残業タイプの両方の行を含める必要があります。さまざまな合計でそれらを選択的に無視するだけです。
受け取った構文エラーは、合計を合計しようとした結果です。(分析関数の設定でこれに遭遇する可能性がありますが、この場合、ここではそれを行うことはできません。)
select js.City, ro.Name,
sum(case when hw.overtime = 0 then hw.Hours else 0 end) AS STHoursworked,
sum(case when hw.overtime = 1 then hw.Hours else 0 end) AS OTHoursworked,
sum(hw.hours) as TotalHours
from ...
group by js.city, ro.Name
order by js.City, ro.Name;
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加