Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
--Class
INSERT INTO Class (ClassID, ClassName, [Section])
VALUES(1, 'First', 'A')
--Student Records
INSERT INTO Student(StudentID, StudentName, ClassID)
VALUES(1, 'Stud1', 1)
--1A)
CREATE VIEW ViewClassStudents
AS
SELECT S.StudentID, S.StudentName,C.ClassName, C.[Section]
FROM STUDENT S
INNER JOIN CLASS C ON S.ClassID=C.ClassID
--SELECT * FROM ViewClassStudents
--2Q. Display the Students who are studying ClassName = First and
--Section “A” with the following columns StudentID, StudentName,
--ClassName, [Section] using ViewClassStudents
--2A)
--3A.
--EXEC USPClassStudents
--EXEC USPClassStudents 'FIRST'
--EXEC USPClassStudents 'FIRST','A'
--OR
AS
BEGIN
SELECT * FROM ViewClassStudents
WHERE ISNULL(ClassName,'')=ISNULL(@ClassName,
ISNULL(ClassName,''))
AND ISNULL([Section], '')=ISNULL(@Section, ISNULL([Section],''))
END
--4Q. Write a function TotalMarks by passing three Parameters Marks1, Marks2, Marks3
--4A.
ALTER FUNCTION TOTALMARKS
(
@MARKS1 DECIMAL(4,2),
@MARKS2 DECIMAL(4,2),
@MARKS3 DECIMAL(4,2)
)
RETURNS DECIMAL(6,2)
AS
BEGIN
RETURN @Marks1+@Marks2+@Marks3
END
--SELECT DBO.TOTALMARKS (MARKS1,MARKS2,MARKS3) FROM Marks
--5A.
SELECT V.StudentName,V. ClassName,V. [Section],
M.MARKS1,M.MARKS2,M.MARKS3,
DBO.TOTALMARKS(MARKS1,MARKS2,MARKS3)TOTALMARKS
FROM ViewClassStudents V
INNER JOIN MARKS M ON (V.StudentID=M.StudentID)
--6A.
--FIRST WE CREATE VIEW WITH FOUR COLUMNS SELECTING FROM
VIEWTotStud AND
--FUNCTION THIS IS THE VIEW VIEWTOTAL
--8A.
ALTER PROC USPRankClassSection
(
@Rank INT,
@ClassName VARCHAR(10) = NULL,
@Section VARCHAR(1) = NULL
)
AS
BEGIN
IF @ClassName IS NULL AND @Section IS NULL
BEGIN
SELECT * FROM VIEWTOTAL V1
WHERE
(
SELECT COUNT(*) FROM VIEWTOTAL V2
WHERE V1.Total <= V2.Total
) = @Rank
END
ELSE IF @ClassName IS NULL AND @Section IS NOT NULL
BEGIN
SELECT * FROM VIEWTOTAL V1
WHERE
(
SELECT COUNT(*) FROM VIEWTOTAL V2
WHERE V1.Total <= V2.Total
AND V1.ClassName = V2.ClassName
) = @Rank
AND ISNULL(ClassName,'')=ISNULL(@ClassName,
ISNULL(ClassName,''))
END
ELSE
BEGIN
SELECT * FROM VIEWTOTAL V1
WHERE
(
SELECT COUNT(*) FROM VIEWTOTAL V2
WHERE V1.Total <= V2.Total
AND V1.ClassName = V2.ClassName
AND V1.Section = V2.Section
) = @Rank
AND ISNULL(ClassName,'')=ISNULL(@ClassName,
ISNULL(ClassName,''))
AND ISNULL([Section], '')=ISNULL(@Section,
ISNULL([Section],''))
END
END
OR
CREATE PROC USPRankClassSectionALL
(
@Rank INT,
@ClassName VARCHAR(10) = NULL,
@Section VARCHAR(1) = NULL
)
AS
BEGIN
SELECT * FROM VIEWTOTAL V1
WHERE
(
SELECT COUNT(*) FROM VIEWTOTAL V2
WHERE V1.Total <= V2.Total
AND V1.ClassName = V2.ClassName
AND V1.Section = V2.Section
) = @Rank
AND ISNULL(ClassName,'')=ISNULL(@ClassName,
ISNULL(ClassName,''))
AND ISNULL([Section], '')=ISNULL(@Section, ISNULL([Section],''))
END
--EXEC USPRankClassSectionALL 1,'SECOND','A'