Почему поле подзапроса не фильтрует таблицу, а главное поле запроса? - PullRequest
0 голосов
/ 26 марта 2019

Я не очень хорош в SQL или SSRS, поэтому прошу прощения за неправильную терминологию.Я работаю в магазине по дереву и редактирую отчет о деталях, в котором есть существующий запрос, который возвращает отдельные поля, содержащие повторяющиеся данные.Одно из полей - это прямой выбор из некоторых объединений, другое - подзапрос с псевдонимом.Я хочу использовать поле подзапроса только для обеспечения согласованности.

Я пытаюсь установить для фильтра табликса значение [MAT_DESC] <> (оставьте пустым), но табликс не фильтруется.[MATNAME] <> (оставьте пустым) работает.not (isnothing ([MAT_DESC])) = True также работает.

WITH ORDERLIST AS (SELECT ... FROM ... WHERE...)
SELECT
IDBGPL.MATNAME, --THIS ONE WILL FILTER
(SELECT MAT.TEXT FROM MAT WHERE MAT.NAME=IDBGPL.MATID) AS MAT_DESC, --THIS ONE WON'T FILTER
(SELECT MAT.ORDERID FROM MAT WHERE MAT.NAME=IDBGPL.MATID) AS MAT_DESC2, --THIS ONE IS ALSO USED AND COMES FROM THE SAME TABLE
FROM ORDERLIST
INNER JOIN...
INNER JOIN...
INNER JOIN...

Когда я пытаюсь отфильтровать таблицу с помощью поля подзапроса, оно не работает.Когда я использую непосредственно выбранное поле, оно делает.Почему SSRS по-разному обрабатывает поле подзапроса?

РЕДАКТИРОВАТЬ: Для пояснения.Данные поступают из программы CAD / CAM.Таблица IDBGPL имеет каждую часть в каждом порядке в системе.Таблица MAT - это раздел программы, который описывает каждый материал.Есть некоторые родительские / дочерние части, где у родителя нет материала.Я хочу отфильтровать эти родительские части.

1 Ответ

0 голосов
/ 26 марта 2019

Это может потенциально вернуть NULL:

(SELECT MAT.TEXT FROM MAT WHERE MAT.NAME=IDBGPL.MATID) AS MAT_DESC

Вы не можете оценить значение NULL, кроме проверки, что оно равно NULL или не равно NULL.

Таким образом, одно решение никогда не будет пустым:

ISNULL((SELECT MAT.TEXT FROM MAT WHERE MAT.NAME=IDBGPL.MATID),"") AS MAT_DESC

Другим решением является проверка на NULL снаружи (в SSRS), поэтому проверка на NULL или пусто. Вам просто нужно понять, что они не имеют одинаковое значение.

Также вам следует подумать о том, чтобы выполнить LEFT JOIN для mat вместо использования подзапросов.

...