2014-12-03 122 views
2

我想獲得最大假期列和ID與最大假期相關......我如何調整查詢?在SQL Server中獲得Max和count在一起

select cal.schoolid,count(d.instruction) as holiday 
    from day d 
    inner join calendar cal on d.calendarID=cal.calendarID 
    inner join schoolyear sy on sy.endyear=cal.endyear and sy.active=1 
    where d.instruction=0 
    group by cal.schoolid 

下面是結果:

ID Holidays 
237 86 
240 86 
261 168 
262 168 
264 155 
266 168 
267 170 

回答

2

使用Top 1得到Max Holiday

SELECT TOP 1 cal.schoolid, 
       Count(d.instruction) AS holiday 
     FROM [day] d 
       INNER JOIN calendar cal 
         ON d.calendarID = cal.calendarID 
       INNER JOIN schoolyear sy 
         ON sy.endyear = cal.endyear 
          AND sy.active = 1 
     WHERE d.instruction = 0 
     GROUP BY cal.schoolid 
ORDER BY Holiday DESC 

或者使用Window Function

;WITH cte 
    AS (SELECT cal.schoolid, 
       Count(d.instruction) AS holiday 
     FROM [day] d 
       INNER JOIN calendar cal 
         ON d.calendarID = cal.calendarID 
       INNER JOIN schoolyear sy 
         ON sy.endyear = cal.endyear 
          AND sy.active = 1 
     WHERE d.instruction = 0 
     GROUP BY cal.schoolid) 
SELECT ID, 
     Holidays 
FROM (SELECT Row_number()OVER (ORDER BY Holidays DESC) rn,* 
     FROM cte) A 
WHERE rn = 1 
+0

非常感謝@ NOdisplayName ....這工作。 – hets 2014-12-04 15:39:31

1

結果莫名其妙地從你選擇什麼(我指的是列名)不同。總之,使用MAX()

select cal.schoolid,MAX(count(d.instruction)) as holiday 
from day d 
inner join calendar cal on d.calendarID=cal.calendarID 
inner join schoolyear sy on sy.endyear=cal.endyear and sy.active=1 
where d.instruction=0 
group by cal.schoolid 
+0

我不認爲這項工作 – 2014-12-04 01:36:51

1
select schoolid, max(holiday) from(select cal.schoolid,count(d.instruction) as 
holiday 
from day d 
inner join calendar cal on d.calendarID=cal.calendarID 
inner join schoolyear sy on sy.endyear=cal.endyear and sy.active=1 
where d.instruction=0 
group by cal.schoolid) group by schoolid