AVG и считать из одного столбца - PullRequest
2 голосов
/ 11 марта 2012

У меня есть таблица по этим столбцам:

[Student_ID],[Class_ID],[Techer_ID],[Course_ID],[Marks]

и для диапазона меток существуют названия, например: от 0 до 5 = D от 6 до 10 = C от 11 до 15 = B от 16до 20 = A

Теперь мне нужно создать T-Sq l Запрос для возврата столбцы этого результата сообщения:

Teacher_ID|Course_ID|Count(Marks)|Count(A)| Count(B)|Count(C)|Count(D) 

Большое спасибо за вашу помощь

Ответы [ 3 ]

2 голосов
/ 11 марта 2012
select  Teacher_ID
,       Course_ID
,       count(*)
,       sum(case when Marks between 16 and 20 then 1 end) as SumA
,       sum(case when Marks between 11 and 15 then 1 end) as SumB
,       sum(case when Marks between 6 and 10 then 1 end) as SumC
,       sum(case when Marks between 0 and 5 then 1 end) as SumD
from    YourTable
group by
        Teacher_ID
,       Course_ID
1 голос
/ 11 марта 2012

Вы можете сделать это с PIVOT. (Обратите также внимание, что эта формулировка вычисления метки-буквы немного безопаснее, чем та, в которой должны быть напечатаны оба конца каждого диапазона.)

with T as (
  select
    Teacher_ID,
    Course_ID,
    case
     when Marks <= 5 then 'countD'
     when Marks <= 10 then 'countC'
     when Marks <= 15 then 'countB'
    else 'countA' end as Letter
  from T
)
  select
    Teacher_ID,
    Course_ID,
    countD+countC+countB+countA as countMarks,
    countA,
    countB,
    countC,
    countD
  from T pivot (
    count(Letter) for Letter in ([countA],[countB],[countC],[countD])
  ) as P
1 голос
/ 11 марта 2012

Я бы использовал тот же подход, что и в Andomar, только измените сумму для подсчета, например:

select  Teacher_ID
,       Course_ID
,       count(*)
,       count(case when Marks between 16 and 20 then 1 end) as countA
,       count(case when Marks between 11 and 15 then 1 end) as countB
,       count(case when Marks between 6 and 10 then 1 end) as countC
,       count(case when Marks between 0 and 5 then 1 end) as countD
from    YourTable
group by
        Teacher_ID
,       Course_ID

На мой взгляд, запрос выглядит более естественным в этом смысле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...