Нужен запрос, который вернет: ExamYear|TotalExamsThisYear|TotalExamsThisYearOfTypeX
Я придумал запрос:
SELECT DatePart(yy,ExamDate), SUM(TotalExamsThisYear), SUM(TotalExamsThisYearOfTypeX)
FROM
(SELECT ExamDate, COUNT(*),
(SELECT COUNT(*) FROM Exams WHERE Exams.ExamDate=e.ExamsDate AND Exams.ExamType=X)
FROM Exams) AS Totals
GROUP BY DatePart(yy,ExamDate)
Мне кажется, что он какой-то кривой совсем. Кто-нибудь может придумать лучше?
SELECT DatePart(yy,ExamDate), SUM(TotalExamsThisYear), SUM(TotalExamsThisYearOfTypeX)
FROM
(SELECT ExamDate, COUNT(*) as TotalExamsThisYear,
(SELECT COUNT(*) as TotalExamsThisYearOfTypeXFROM Exams WHERE Exams.ExamDate=e.ExamsDate AND Exams.ExamType=X)
FROM Exams) AS Totals
GROUP BY DatePart(yy,ExamDate)
А попробуй так, тока TABLE ACCESS FULL, похоже, получишь
SELECT RA.*,
(SELECT COUNT(*) FROM EXAMS WHERE DATEPART('YY',EXAMDATE)=RA.YEAR) AS TOTAL_COUNT
FROM (
SELECT DATEPART('YY',EXAMDATE) AS YEAR, EXAMTYPE, COUNT(*) AS EXAMTYPE_COUNT
FROM EXAMS
WHERE (EXAMDATE>='01.01.1991' AND EXAMDATE<'01.01.2003')
GROUP BY DATEPART('YY',EXAMDATE), EXAMTYPE
) RA
Никогда не бойся браться делать то, что делать не умеешь. Помни, ковчег был построен любителем. Профессионалы построили Титаник...
Здравствуйте glut, Вы писали:
Ну, если это MSSQL, то надо так:
[sql]
SELECT DatePart(yy,ExamDate), Count(*) as TotalExamsThisYear, Sum(case ExamType when X then 1 else 0 end) as TotalExamsThisYearOfTypeX
FROM Exams
GROUP BY DatePart(yy,ExamDate)
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте glut, Вы писали:
G>Hi.
G>Есть таблица Exams: ExamID|ExamDate|ExamType
G>Нужен запрос, который вернет: ExamYear|TotalExamsThisYear|TotalExamsThisYearOfTypeX
Ой, раскраску прокосячил:
SELECT DatePart(yy,ExamDate), Count(*) as TotalExamsThisYear, Sum(case ExamType when X then 1 else 0 end) as TotalExamsThisYearOfTypeX
FROM Exams
GROUP BY DatePart(yy,ExamDate)
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте Sinclair, Вы писали:
S>Ой, раскраску прокосячил:
S>
S>SELECT DatePart(yy,ExamDate), Count(*) as TotalExamsThisYear, Sum(case ExamType when X then 1 else 0 end) as TotalExamsThisYearOfTypeX
S>FROM Exams
S>GROUP BY DatePart(yy,ExamDate)
S>
Гениально! Большое спасибо!!!
А на Access'е (в итоге все будет на MSSQL, но мне нужно сделать демку для заказчика, а она будет на Access'е) это как сделать? Кроме того что я придумал, что-нибудь можно сделать? На Acess'е, правда, нельзя сделать SELECT .. FROM (SELECT ...), но можно сделать View.
Здравствуйте glut, Вы писали:
G>Здравствуйте Sinclair, Вы писали:
S>>Ой, раскраску прокосячил:
G>А на Access'е (в итоге все будет на MSSQL, но мне нужно сделать демку для заказчика, а она будет на Access'е) это как сделать? Кроме того что я придумал, что-нибудь можно сделать? На Acess'е, правда, нельзя сделать SELECT .. FROM (SELECT ...), но можно сделать View.
Попробуй так (я не уверен — не очень секу в аксессе, и проверить сейчас не могу):
SELECT DatePart(yy,ExamDate), Count(*) as TotalExamsThisYear, Sum(IIF(ExamType = X, 1, 0)) as TotalExamsThisYearOfTypeX
FROM Exams
GROUP BY DatePart(yy,ExamDate)
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, glut, Вы писали:
G>Здравствуйте Sinclair, Вы писали:
S>>Попробуй так (я не уверен — не очень секу в аксессе, и проверить сейчас не могу): S>>
S>>SELECT DatePart(yy,ExamDate), Count(*) as TotalExamsThisYear, Sum(IIF(ExamType = X, 1, 0)) as TotalExamsThisYearOfTypeX
S>>FROM Exams
S>>GROUP BY DatePart(yy,ExamDate)
S>>
G>Удивительно, какой я тупой! =)
Ну зачем же так самокритично!
G>Большое спасибо!
Пожалуйста-незачто