2010-12-14 75 views
0

A titre d'exemple, permet de dire que je donne les résultats suivants (simplifié) tableau (appelé NumericValue):Comment résoudre une catégorie d'une table de propriété dans SQL

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 

Supposons maintenant que j'ai cette table appelée Employés :

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

Maintenant, ce dont j'ai besoin est de sélectionner le champ "valeur" pour ces deux employés. Et disons que les ingénieurs n'auront jamais un "emplacement" dans la table NumericValue, donc je ne peux pas faire une simple jointure. Au lieu, je reformater mon "NumericTable" comme suit:

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

Avec une "propriété" table comme ceci:

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 

(note, pas d'entrée pour "emplacement" dans la catégorie 4, qui fait référence à l'ingénieure de 40 ans)

Ce qui est logique pour moi, puisque j'ai seulement des entrées où un champ de catégorisation spécifique est important. Mais comment puis-je résoudre cela et extraire le champ Valeur pour l'employé spécifique?

Merci
Karl

Répondre

0

Pourquoi ne pas faire quelque chose comme ça?

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) 

remplacer Juste le NumericValue Localisation avec la valeur de l'emplacement des employés quand il est NULL