Как разрешить категорию из таблицы свойств в SQL - PullRequest
0 голосов
/ 14 декабря 2010

В качестве примера, скажем, у меня есть следующая (упрощенная) таблица (называемая NumericValue):

Age   Gender    Occupation      Location        Value
40    M         Accountant      Johannesburg    100
40    F         Accountant      Johannesburg    120
40    M         Engineer        NULL            110
40    F         Engineer        NULL            110

Теперь предположим, что у меня есть таблица с именем Employees:

Employee Number  Age   Gender    Occupation      Location        
1000123          40    F         Engineer        Cape Town      
1000124          40    M         Accountant      Johannesburg

Теперь мне нужно выбрать поле «Значение» для этих двух сотрудников. И скажем, у инженеров никогда не будет «местоположения» в таблице NumericValue, поэтому я не могу просто сделать простое соединение. Вместо этого я переформатировал свой «NumericTable» следующим образом:

Table: "CategoryValue"
Category   Value
1          100
2          120
3          110
4          110

С таблицей "свойств", подобной этой:

Table: "CategoryProperty"
Category   FieldName   FieldValue
1          Age         40
1          Gender      M
1          Occupation  Accountant
1          Location    Johannesburg
.
.
4          Age         40
4          Gender      F
4          Occupation  Engineer

(примечание: нет записи для "местоположения" в категории 4, которая относится к 40-летней женщине-инженеру)

Что имеет смысл для меня, поскольку у меня есть записи только в тех случаях, когда определенное поле категоризации имеет значение. Но как мне решить эту проблему и извлечь поле «Значение» для конкретного сотрудника?

Спасибо
Karl

1 Ответ

0 голосов
/ 14 декабря 2010

Почему бы тебе не сделать что-то подобное?

Select  e.EmployeeNumber,
        e.Age,
        e.Gender,
        e.Occupation,
        e.Location,
        nv.Value
From Employees e
Join NumericValue nv on e.Age = nv.Age
                        And e.Gender = nv.Gender
                        And e.Occupation = nv.Occupation
                        And e.Location = IsNull(nv.Location, e.Location)

Просто замените местоположение NumericValue значением местоположения сотрудника, если оно равно NULL

...