2016-08-23 88 views
1

我有,因爲它 並不在聚合函數或包含此SQL查詢SQL是在選擇列表中無效

列「StudentSIP.StartDate」下面的錯誤是在選擇列表中無效GROUP BY 子句。

select concat(sc.StartDate, sc.EndDate) SIPDate, 
     count (sj.LOComment) WeekReviewed, 
     count(sjd.WeekNo) TotalWeek, 
     sum(sjj.TotalDaysRecord) TotalDaysRecord, 
     count(case sjd.JournalStatusCode when 'D' then 1 else null end) PendingComplete 
from StudentJournalDate sjd 
left join StudentJournal sj 
    on sjd.WeekNo = sj.WeekNo 
left outer join 
(
    select sj.WeekNo, 
      case when RTRIM(sj.Day1Journal) = '' or sj.Day1Journal is null then 0 else 1 end + 
      case when RTRIM(sj.Day2Journal) = '' or sj.Day2Journal is null then 0 else 1 end + 
      case when RTRIM(sj.Day3Journal) = '' or sj.Day3Journal is null then 0 else 1 end + 
      case when RTRIM(sj.Day4Journal) = '' or sj.Day4Journal is null then 0 else 1 end + 
      case when RTRIM(sj.Day5Journal) = '' or sj.Day5Journal is null then 0 else 1 end + 
      case when RTRIM(sj.Day6Journal) = '' or sj.Day6Journal is null then 0 else 1 end + 
      case when RTRIM(sj.Day7Journal) = '' or sj.Day7Journal is null then 0 else 1 end as TotalDaysRecord 
    from StudentJournal sj 
) as sjj 
    on sjj.WeekNo = sj.WeekNo 
left outer join StudentSIP sc 
    on sc.AdminNo = sjd.AdminNo 
+0

這是產生錯誤的實際查詢?該錯誤消息似乎是說某個分組已完成,但我沒有看到它。事實上,我並沒有看到你在上面發佈的查詢有任何明顯的問題。 –

+0

是的,這是實際的查詢。 – user3807187

+0

正如您使用聚合函數使用分組爲sc.StartDate,sc.EndDate –

回答

2

你從來沒有告訴我們您正在使用哪個版本的SQL,但我懷疑的是,集合函數在SELECT(例如COUNTSUM)的存在是將數據庫置於一個分組方式。在此模式下,您只能使用SELECT中列的聚合函數或GROUP BY子句中出現的列。由於sc.StartDate既不是一個聚合,也沒有GROUP BY子句,因此會出現此錯誤。

一個快速的修復,使這個錯誤消失將是GROUP BY級聯的開始和結束日期,即添加GROUP BY CONCAT(sc.StartDate, sc.ENDDate)到您當前查詢的結尾:

SELECT CONCAT(sc.StartDate, sc.ENDDate) SIPDate, 
     COUNT (sj.LOComment) WeekReviewed, 
     COUNT(sjd.WeekNo) TotalWeek, 
     SUM(sjj.TotalDaysRecord) TotalDaysRecord, 
     COUNT(CASE sjd.JournalStatusCode WHEN 'D' THEN 1 ELSE NULL END) PENDingComplete 
FROM StudentJournalDate sjd 
LEFT JOIN StudentJournal sj 
    ON sjd.WeekNo = sj.WeekNo 
LEFT OUTER JOIN 
(
    SELECT sj.WeekNo, 
      CASE WHEN RTRIM(sj.Day1Journal) = '' OR sj.Day1Journal IS NULL THEN 0 ELSE 1 END + 
      CASE WHEN RTRIM(sj.Day2Journal) = '' OR sj.Day2Journal IS NULL THEN 0 ELSE 1 END + 
      CASE WHEN RTRIM(sj.Day3Journal) = '' OR sj.Day3Journal IS NULL THEN 0 ELSE 1 END + 
      CASE WHEN RTRIM(sj.Day4Journal) = '' OR sj.Day4Journal IS NULL THEN 0 ELSE 1 END + 
      CASE WHEN RTRIM(sj.Day5Journal) = '' OR sj.Day5Journal IS NULL THEN 0 ELSE 1 END + 
      CASE WHEN RTRIM(sj.Day6Journal) = '' OR sj.Day6Journal IS NULL THEN 0 ELSE 1 END + 
      CASE WHEN RTRIM(sj.Day7Journal) = '' OR sj.Day7Journal IS NULL THEN 0 ELSE 1 END AS TotalDaysRecord 
    FROM StudentJournal sj 
) AS sjj 
    ON sjj.WeekNo = sj.WeekNo 
LEFT OUTER JOIN StudentSIP sc 
    ON sc.AdminNo = sjd.AdminNo 
GROUP BY CONCAT(sc.StartDate, sc.ENDDate) -- make error go away so you are happy again :-) 
+0

我正在使用sql server 2014.它的工作原理!謝謝 – user3807187

+0

嗨,我嘗試使用此函數轉換日期CONVERT(varchar,sc.StartDate,103)+'「+」「+」'+'「+」 - 「+」'+ CONVERT(varchar,sc.EndDate ,103)SIPDate將以dd/mm/yyyy - dd/mm/yyyy顯示。我如何將它添加到查詢中?謝謝 – user3807187

+0

你可以通過改變選擇和分組,或者你可以子查詢它。 –

-1

在SQL中使用時,不工作ggregate功能沒有group by子句;

select key1,key2,count(*),sum(*) from tableA group by key1,key2