У меня есть две таблицы register
и att_bottom
, и я хочу отображать только студентов в определенном здании, которые были опозданы на основе сегодняшней даты с периодами, разделенными запятой. Это способ отображения данных при соединении обеих таблиц:Объяснение значений строк sql server 2008 r2
Student ID | Building | Period | Grade
12345 2 1 11
12345 2 5 11
2 1 12
Я хочу это:
Student ID | <u>Building | Period | Grade
12345 2 1,5 11
2 1 12
Это мой запрос:
select r.STUDENT_ID,
r.BUILDING ,
(select ab.attendancePeriod + ','
from att_bottom ab
where ab.STUDENT_ID = r.student_id
and ab.building = '2'
and ab.attendance_c ='T'
and ab.SCHOOL_YEAR =2014
CONVERT(date,ab.attendance_date,102) = convert(date,getdate(),102)
FOR XML PATH ('')) AS PERIODS,
r.GRADE
FROM register r
where r.CURRENT_STATUS = 'A'
and r.BUILDING ='2'
Я получаю все студенты в здании 2 и даже если у них нет attedance_c of T; значение NULL для периодов его извлечения:
Student ID | Building | Period | Grade
12345 2 1 , 5 11
2 1 , 12
95687 2 NULL 09
78417 2 NULL 10
20357 2 NULL 11
Я попытался and ab.attendancePeriod is Not NULL
и я до сих пор получить тот же результат.
Любые мысли?
Что 'DataType' вы используете для вашего Столбец «Период» ?? – prograshid
Я получаю три строки с этим запросом, а не 5 (после исправления синтаксических ошибок). Можете ли вы дважды проверить, как вы получаете эти результаты? (например, откуда пришли 95687, 78417 и т. д. - они просто существуют в регистре, но не в att_bottom?) –
Номера представляют собой случайные идентификаторы, которые я использовал для иллюстрации проблемы. – user1308665