SQL Server SSRS запрос Проблема - PullRequest
0 голосов
/ 15 октября 2018

У меня следующий запрос:

SELECT        
    pupils.txtSchoolID, pupils.txtPreName, pupils.txtSurname,
    pupils.txtForm, pupils.txtAdditionalHealth, pupils.txtAllergyNotes,
    notes.txtNote
FROM 
    TblPupilManagementPupils AS pupils 
LEFT OUTER JOIN
    TblPupilManagementHealthNotes AS notes ON pupils.txtSchoolID = notes.txtSchoolID

Мне нужно вытащить notes.txtNote только при notes.txtType = 'Dietary', однако, когда я задаю это в предложении WHERE, я получаю записи только сТип Dietary, мне все еще нужны все данные таблицы ученика.Я думал, что левое внешнее объединение сделает это.

При установке предложения WHERE я пытаюсь

WHERE notes.txtType = 'Dietary' 

, но это также не работает, я временно установил в качестве параметра.

Ответы [ 3 ]

0 голосов
/ 15 октября 2018

Вы должны удалить предложение where и поставить это условие в условие, потому что

Логически все JOIN-соединения выполняются как INNER-JOIN с использованием фильтров ON, а затем, как последующий шаг, добавляются все строки OUTER JOIN.обратно на нужную сторону.После завершения всех JOIN обрабатывается фильтр WHERE.в результате, когда вы применили его там, где он удалил все ожидаемые Dietary значения записей

SELECT        pupils.txtSchoolID, pupils.txtPreName, pupils.txtSurname,
pupils.txtForm, pupils.txtAdditionalHealth, pupils.txtAllergyNotes,
notes.txtNote

FROM TblPupilManagementPupils AS pupils LEFT OUTER JOIN
TblPupilManagementHealthNotes AS notes
ON pupils.txtSchoolID = notes.txtSchoolID and notes.txtType = 'Dietary'
0 голосов
/ 15 октября 2018

Альтернативно менее оптимизированный маршрут;Запустите ваш запрос как есть без предложения where и без дополнительного предложения on.Вставьте данные во временную таблицу и затем отфильтруйте эти данные;где notes.txtType = @Param.и в этом @Param вы объявляете верхнюю часть хранимой процедуры или запрос как @Param varchar (200), чтобы захватить любое ожидаемое значение внешнего интерфейса, которое вы ожидаете.

0 голосов
/ 15 октября 2018

Поместите условие (notes.txtType = 'Dietary') с предложением ON:

. . . 
FROM TblPupilManagementPupils AS pupils LEFT OUTER JOIN
     TblPupilManagementHealthNotes AS notes 
     ON pupils.txtSchoolID = notes.txtSchoolID AND notes.txtType = 'Dietary'; 

Если вы отфильтруете данные таблицы LEFT OUTER JOINED с предложением WHERE, тогда вы создаете объединение как INNER JOIN вместо LEFT JOIN.

...