Выберите родительский доступ для чтения, чтобы он стал «Y», если есть какая-либо дочерняя запись с «Y» read_access - PullRequest
0 голосов
/ 26 марта 2012

У меня возникли проблемы в моем запросе sql. Пожалуйста, посмотрите мой Пример

enter image description here

Как видите, Инвентарный отчет является родительским для оповещения о запасах и отчета о движении запаса .

Теперь у меня есть вопрос. Как я могу выбрать родительский доступ для чтения, чтобы он стал 'Y', когда есть какая-либо дочерняя запись с 'Y' read_access? С другой стороны, если не существует какой-либо существующей дочерней записи, имеющей «Y», родительский read_acess станет «N»

Извините за мой плохой английский. Пожалуйста, помогите

1 Ответ

1 голос
/ 26 марта 2012

Это должно работать:

SELECT ISNULL(CHILDREN_TABLE.READ_ACCESS, PARENT_TABLE.READ_ACCESS) AS READ_ACCESS
FROM TABLE AS PARENT_TABLE
    LEFT JOIN TABLE AS CHILDREN_TABLE
        ON CHILDREN_TABLE.Parent = PARENT_TABLE.Child

Это даст вам дубликаты, хотя (2 строки для Inventory Report, одна для Stock Alert Report и одна для Stock Movement Report) Вы можете решить это с помощью SELECT DISTINCT ...

ИЛИ, я полагаю, добавление GROUP BY в дочернюю таблицу решит дубликат:

SELECT ISNULL(CHILDREN_TABLE.READ_ACCESS, PARENT_TABLE.READ_ACCESS) AS READ_ACCESS
FROM TABLE AS PARENT_TABLE
    LEFT JOIN (SELECT Parent, READ_ACCESS FROM TABLE GROUP BY Parent) AS CHILDREN_TABLE
        ON CHILDREN_TABLE.Parent = PARENT_TABLE.Child

Теперь вы все равно получите дубликат, если есть ребеноку которого READ_ACCESS составляет Y, а у другого READ_ACCESS составляет N.Однако это звучит как то, что в любом случае нужно будет обсудить с вашими бизнес-правилами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...