簡體   English   中英

SSRS - 為什么我的 SUM() 不能正常工作?

[英]SSRS - Why isn't my SUM() working correctly?

我遵循了 techonthenet 上的指南,其中說對於 SUM 查詢,您需要將Sum(expr)放在SELECT語句中,然后對您選擇的所有其他字段進行GROUP BY (偽代碼;如果我錯了,請糾正我) . 下面是我的嘗試。 為什么我收到錯誤

“執行查詢時出錯。'(' 附近的語法不正確。錯誤:102;第 9 行”

所有這一切的最終結果將是一個報告,而不僅僅是一個查詢。 在報告中,下面的所有字段都將顯示,但 [差異] 字段將在底部匯總。 我覺得與其在查詢中求和,不如在報告中求和...

編輯- 我刪除了 [ALL] 但現在我收到錯誤“不能在用於 group by 子句列表的表達式中使用聚合或子查詢。” 它還說這個錯誤在第 29 行。我會在下面標記它。

SELECT 

    JOB.WHSE,
    LEFT(RESSCHD000.RESID, 6) AS Line,
        RIGHT(LEFT(JOB000.JSID, 11), 10)+ '-' +RIGHT(LEFT(JOB000.JSID, 27), 2) AS [Job Number],
    LEFT(RESSCHD000.STARTDATE, 7)+ '         ' +RIGHT(Convert(Datetime, MIN(RESSCHD000.STARTDATE)), 8) AS [Start],
    LEFT(RESSCHD000.ENDDATE, 7)+ '     ' +RIGHT(Convert(Datetime, MAX(RESSCHD000.ENDDATE)),8) AS [End], 
        RESSCHD000.STATUSCD, 
        Sum((Dateadd("n",DateDiff("n", MIN(RESSCHD000.STARTDATE),MAX(RESSCHD000.ENDDATE)),'00:00:00'))) AS [SumOfDifference], 
        RESSCHD000.JOBTAG,
    CASE
        WHEN    Dateadd("n",DateDiff("n", MIN(RESSCHD000.STARTDATE),MAX(RESSCHD000.ENDDATE)),'00:00:00') > '3:59:00'
                THEN 'Full Sanitation'
        ELSE    'Dry Clean' 
    END AS [Type of Sanitation],
    jrt_sch.Uf_Quoted_Crew_Size AS [Crew Size]

FROM 
        RESSCHD000 INNER JOIN JOB000 ON RESSCHD000.JOBTAG = JOB000.JOBTAG
    INNER JOIN JOB ON JOB.JOB = RIGHT(LEFT(JOB000.JSID, 11), 10) AND JOB.suffix = RIGHT(LEFT(JOB000.JSID, 27), 2)
    LEFT OUTER JOIN jrt_sch ON jrt_sch.job = job.job
WHERE
    job.job_date = @job_date

GROUP BY 
    JOB.WHSE,
    LEFT(RESSCHD000.RESID, 6),
    RIGHT(LEFT(JOB000.JSID, 11), 10)+ '-' +RIGHT(LEFT(JOB000.JSID, 27), 2), --line 29
    LEFT(RESSCHD000.STARTDATE, 7)+ '         ' +RIGHT(Convert(Datetime, MIN(RESSCHD000.STARTDATE)), 8),
    LEFT(RESSCHD000.ENDDATE, 7)+ '     ' +RIGHT(Convert(Datetime, MAX(RESSCHD000.ENDDATE)),8), 
    RESSCHD000.STATUSCD, 
    RESSCHD000.JOBTAG,
    CASE
        WHEN    Dateadd("n",DateDiff("n", MIN(RESSCHD000.STARTDATE),MAX(RESSCHD000.ENDDATE)),'00:00:00') > '3:59:00'
                THEN 'Full Sanitation'
        ELSE    'Dry Clean' 
    END,
    jrt_sch.Uf_Quoted_Crew_Size

HAVING 
                RESSCHD000.STATUSCD='s'

錯誤是由於這一行:

Sum([ALL] (Dateadd("n",DateDiff("n", MIN(RESSCHD000.STARTDATE),MAX(RESSCHD000.ENDDATE)),'00:00:00'))) AS [SumOfDifference] 

總和正在尋找一個字段(或某種公式)來求和。 您有一個字段名稱,后跟一個公式。 我猜您想要基於 FIELD 名稱 (SumOfDifference) 的秒差總和。

我認為您只需要刪除[ALL]

SUM(DATEADD("n",DATEDIFF("n", MIN(RESSCHD000.STARTDATE), MAX(RESSCHD000.ENDDATE)),'00:00:00')) AS [SumOfDifference]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM