Как получить одну строку из пары

avatar
AgentShaw
8 апреля 2018 в 09:11
63
0
2

enter image description here

Здесь я хочу, чтобы отображалась только одна строка.

Вот длинный кусок неэффективного кода, который работает.

Select T1.FacFirstName + ' ' + T1.FacLastName AS FacultyName, T1.FacDept,
T2.FacFirstName + ' ' + T2.FacLastName AS ColleagueName, 
T2.FacDept AS ColleagueDept, 
T1.CourseNo, T1.AVERAGEGRADE AS FACULTYAVGGRADE, 
T2.AVERAGEGRADE AS COLLEAGUEAVGGRADE
FROM    (SELECT FACULTY.FACNO, FACULTY.FACFIRSTNAME, FACULTY.FACLASTNAME, 
        OFFERING.COURSENO, FACULTY.FACDEPT, AVG(ENROLLMENT.ENRGRADE) AS 
        AVERAGEGRADE
        FROM FACULTY, OFFERING, ENROLLMENT 
        WHERE FACULTY.FACNO = OFFERING.FACNO AND ENROLLMENT.OFFERNO = 
        OFFERING.OFFERNO
        GROUP BY ENROLLMENT.OFFERNO, FACULTY.FACNO, FACULTY.FACFIRSTNAME, 
        FACULTY.FACLASTNAME, OFFERING.COURSENO, FACULTY.FACDEPT) T1, 
        (SELECT FACULTY.FACNO, FACULTY.FACFIRSTNAME, FACULTY.FACLASTNAME, 
        OFFERING.COURSENO, FACULTY.FACDEPT, AVG(ENROLLMENT.ENRGRADE) AS 
        AVERAGEGRADE
        FROM FACULTY, OFFERING, ENROLLMENT 
        WHERE FACULTY.FACNO = OFFERING.FACNO AND ENROLLMENT.OFFERNO = 
        OFFERING.OFFERNO
        GROUP BY ENROLLMENT.OFFERNO, FACULTY.FACNO, FACULTY.FACFIRSTNAME, 
        FACULTY.FACLASTNAME, OFFERING.COURSENO, FACULTY.FACDEPT) T2
where T1.CourseNo = T2.CourseNo and T1.FacDept != T2.FacDept

PS: я новичок в SQL и StackOverflow, поэтому предложения по обоим вариантам приветствуются. ТИА.

Источник
Rehan Azher
8 апреля 2018 в 09:13
0

Вы можете использовать SELECT TOP 1

AgentShaw
8 апреля 2018 в 09:14
0

Нет, я не могу этого сделать, так как код не будет надежным, когда появится несколько CourseNo.

Rehan Azher
8 апреля 2018 в 09:19
0

Итак, какую строку вы бы предпочли, либо вы можете добавить еще одно условие, чтобы получить одну выбранную строку. Или вы можете использовать OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY msdn.microsoft.com/en-us/library/ms188385(SQL.110).aspx

AgentShaw
8 апреля 2018 в 09:22
0

В идеале мне нужна одна строка для каждого CourseNo, который появляется в результате подзапроса. Любой ряд подходит. Я не уверен, что OFFSET будет работать, потому что, если есть 3 факультета, предлагающих один и тот же номер курса, результаты будут вводящими в заблуждение.

Jeff Lewis
17 августа 2018 в 16:58
0

Можете ли вы добавить некоторую информацию о данных, которые вы запрашиваете (схема таблиц, первичные ключи и т. д.)

Forty3
5 ноября 2018 в 22:30
0

Вы пытаетесь определить всех FACULTY, которые предлагают конкретный OFFERING, наряду со средним ENRGRADE для всех зачисленных на этот факультет? И могут ли быть преподаватели N, предлагающие то же самое COURSENO? Весь вывод в одной строке?

Ответы (0)