2016-08-23 4 views
1

Ich habe die folgende Fehlermeldung für diese SQL-AbfrageSQL ist ungültig in der Auswahlliste

Spalte ‚StudentSIP.StartDate‘ in der Auswahlliste ungültig ist, weil es ist nicht in einer Aggregatfunktion oder den darin enthaltenen GROUP BY Klausel.

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

Ist dies die eigentliche Abfrage, die den Fehler verursacht hat? Die Fehlermeldung scheint zu sagen, dass irgendwo eine Gruppierung gemacht wurde, aber ich sehe sie nicht. So wie es ist, sehe ich tatsächlich keine grellen Probleme mit der Abfrage, die Sie oben gepostet haben. –

+0

Ja, das ist die eigentliche Abfrage. – user3807187

+0

Wie Sie hatten Aggregatfunktion verwenden Verwenden Sie Gruppieren nach sc.StartDate, sc.EndDate –

Antwort

2

Sie haben uns gesagt nie, welche Version von SQL Sie verwenden, aber ich vermute, dass die Anwesenheit der Aggregatfunktionen in Ihrem SELECT (z COUNT und SUM) werden, um die Datenbank in eine Gruppierung Modus. In diesem Modus können Sie nur Aggregatfunktionen von Spalten in SELECT oder Spalten verwenden, die in einer GROUP BY-Klausel erscheinen. Da sc.StartDate kein Aggregat ist und Sie keine GROUP BY-Klausel haben, erhalten Sie diesen Fehler.

Eine schnelle Lösung, um diesen Fehler zu machen weggehen die verketteten Start- und Enddaten GROUP BY wären, dh GROUP BY CONCAT(sc.StartDate, sc.ENDDate) bis zum Ende der aktuellen Abfrage hinzufügen:

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

Ich benutze SQL Server 2014. Es funktioniert! Danke – user3807187

+0

Hallo, ich versuche, das Datum mit dieser Funktion zu konvertieren CONVERT (varchar, sc.StartDate, 103) + '"+" "+"' + '"+" - "+"' + CONVERT (varchar, sc.EndDate , 103) SIPDate, so dass es in TT/MM/JJJJ - TT/MM/JJJJ angezeigt wird. Wie füge ich es in die Abfrage ein? Danke – user3807187

+0

Sie können entweder die Auswahl und die Gruppe durch ändern, oder Sie können es unterqueren. –

-1

die SQL funktioniert nicht, wenn A mit ggregate Funktionen ohne Gruppenklausel;

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

Verwandte Themen