2010-12-14 12 views
0

Als ein Beispiel zu beheben, können sagen, ich die folgende (vereinfachte) Tabelle haben (NumericValue genannt):Wie eine Kategorie aus einer Eigenschaftstabelle in 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 

Nehmen wir nun an Ich habe diese Tabelle mit dem Namen Mitarbeiter :

Nun, was ich brauche, ist das Feld "Wert" für diese beiden Mitarbeiter zu wählen. Und sagen wir einmal, dass Ingenieure nie einen "Standort" in der NumericValue-Tabelle haben werden, so dass ich nicht einfach einen einfachen Join machen kann. Statt, umformatieren ich meine "NumericTable" wie folgt:

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

Mit einem "Objekt" Tabelle wie folgt aus:

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, kein Eintrag für "Standort" unter der Kategorie 4, die bezieht sich an die 40-jährige Ingenieurin)

Das macht für mich Sinn, da ich nur Einträge habe, bei denen ein bestimmtes Kategorisierungsfeld von Bedeutung ist. Aber wie kann ich das beheben und das Wertfeld für den bestimmten Mitarbeiter extrahieren?

Dank
Karl

Antwort

0

Warum Sie nicht so etwas tun?

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) 

Ersetzen Sie einfach die NumericValue Lage mit dem Wert des Mitarbeiter Ort, wenn es NULL ist