ケースステートメントを1行に表示するにはどうすればよいですか?group byを付けないとエラーが発生しますが、group byを実行すると、2つの異なる行が作成されます。

スティーブB

複数の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句にも含まれていないため、選択リストでは無効です。

shawnt00

必要なのは、合計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]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ