2011-09-27 4 views
2
SELECT S.studentID, S.studentFName, S.DOB, S.studentEMail, S.studentAddress 
FROM Student AS S RIGHT OUTER JOIN 
(SELECT Attendance.studentID, COUNT(*) AS cnt FROM Attendance CROSS JOIN 
CourseUnit WHERE (Attendance.attStatus = 'Yes') AND (CourseUnit.courseCode = 'S3000') AND (CONVERT(VARCHAR, Attendance.attDate, 101) < '11/10/2010') GROUP BY Attendance.studentID 
HAVING (COUNT(*) < 5)) AS A ON A.studentID = S.studentID 

attDate을 제외한 모든 것이 작동합니다. 나는 2010 년에 어떤 기록도 가지지 않고있다. 그리고 그것은 그들 모두를 아직도 가지고 온다?왜 데이터를 필터링하지 않습니까? smalldatetime

+1

날짜를 문자열로 처리하는 이유는 무엇입니까? SQL Server는 날짜를 비교하는 방법을 알고 있으며 그럴 수 있습니다. 문자열로 변환하면 모든 종류의 오류 가능성이 열리게됩니다. –

+0

Attendance.attDate는 어떤 데이터 유형입니까? –

+0

CONVERT (VARCHAR, Attendance.attDate, 101) 왜 varchar로 변환 하시겠습니까? – Nighil

답변

0

'2010 년에 모든 날짜를 오늘보다 짧게 지정 하시겠습니까?'(< '2/10/2010')?

어쩌면 <>으로 전환해야 할 수 있습니다.

+0

네,하지만 그것은 결과를 가져올지를보기위한 테스트 일뿐입니다. – David

+0

내 코드를 업데이트했습니다. – David

+1

@David 정확히 무엇을하려고합니까? 그리고 무엇을하고 있습니까? 샘플 출력을 보여주세요. 또한 코드를 약간 정리할 수 있습니까? 사방에 여분의 공백이 있습니다. – Dave

1

내가 추측 해 보도록하겠습니다. 귀하의 날짜는 varchar입니까? 해고 됐어. 그 추한 추한 추한 unperformant 및 에러 유발 구조에 대한 이유

(CONVERT (VARCHAR, Attendance.attDate 101) < '11/2천10분의 10 ')가 Attendance.attDate Date 객체되는 대신

시작해? 그것을 시도하고 그것이 작동하는지 확인하십시오.

0

Attendance.attDate은 데이터 형식이 datetime이어야하며 지정된 날짜 값보다 먼저 행을 사용하려면 비교가 Attendance.attDate < '20101110' (YYYYMMDD)이어야합니다.

관련 문제