2014-10-04 3 views
2

Я хочу создать вычисляемый столбец родительской таблицы, который будет содержать идентификатор, основанный на дочерних строках родителя.Заполнение родительского поля на основе дочерних значений

Пример Родитель Таблица:

ID Name    CalculatedClassification 
1 Parent Item #1  (computed, should return 1) 
2 Parent Item #2  (computed, should return 2) 
3 Parent Item #3  (computed, should return -1 as there is a mixed result) 

Пример для детей Таблица

ID Name    ParentRow  ClassificationID 
    1 Child Item #1  1    1 
    2 Child Item #2  1    1 
    3 Child Item #3  1    1 
    4 Child Item #4  2    2 
    5 Child Item #5  2    2 
    6 Child Item #6  3    1 
    7 Child Item #7  3    0 
    8 Child Item #8  3    1  

Существует многие ко многие таблицы соединяющей два, но я оставил это за простоту. Кроме того, ClassificationID является внешним ключом к таблице идентификаторов классификации, которая может расти со временем.

Любые идеи о том, как я могу это сделать в функции или другой конструкции SQL-сервера?

Спасибо!

ответ

3

Я не рекомендую создавать computed column при ссылках на другие таблицы.

Существует несколько способов сделать это. Одним из них является использование min и max агрегатов с case заявления для определения значения:

select p.id, 
     p.name, 
     case 
      when min(c.classificationid) = max(c.classificationid) 
      then max(c.classificationid) 
      else -1 
     end CalculatedClassification 
from parent p 
    join child c on p.id = c.parentrow 
group by p.id, p.name 
+0

Отлично, я просто проверял в моих реальной базе данных, и она работает как чавканье. Большое спасибо!!!!! Кроме того, я пересматриваю вычисленную колонку и, возможно, используя представления, чтобы собрать все вместе. – testuser900

Смежные вопросы