Beispiel: Auflösen von Domänencodes in Beschreibungswerten mit SQL

XML-Spaltenabfragen enthalten ein Beispiel zum Extrahieren von Code und Beschreibungspaaren aus einer Domäne mit codierten Werten als Ergebnissatz. Jenseits einfacher Schemauntersuchung ist eine praktische Anwendung dieser Fähigkeit das Auflösen der Codes aus einem Dataset.

In vielen Fällen werden die Codes in einer Domäne mit codierten Werten willkürlich zugewiesen. In einer Domäne mit codierten Werten von Rohrleitungsmaterialien können die Beschreibungswerte der Domäne z. B. Kupfer, PVC und Stahl sein, aber die Codes der Domäne könnten 1, 2 und 3 sein, was Benutzern wenig nützt, die eine SQL-Abfrage für eine Tabelle ausführen, in der die Domäne verwendet wird.

In den folgenden Beispielen wird gezeigt, wie eine Domäne mit codierten Werten in einer Unterabfrage abgefragt wird und diese Ergebnisse mit den Ergebnissen einer Tabellenabfrage, in der die Domäne verwendet wird, zusammengeführt werden.

Im ersten Beispiel verwendet die Spalte "Zoning" der Tabelle "Parcels" (von Besitzer "molly") die Domäne "ZoningCodes". Die Tabelle "Parcels" wird mit der ZoningCodes-Domäne mit codierten Werten verbunden, um eine Liste der Domänencodes und der Beschreibungswerte zurückzugeben.

--SQL Server

SELECT OBJECTID AS "Object ID",Value AS "Zoning Code"
FROM molly.parcels LEFT OUTER JOIN
 (SELECT
   codedValue.value('Code[1]','nvarchar(max)') AS "Code",
   codedValue.value('Name[1]', 'nvarchar(max)') AS "Value"
  FROM GDB_ITEMS AS items INNER JOIN GDB_ITEMTYPES AS itemtypes 
  ON items.Type = itemtypes.UUID
  CROSS APPLY items.Definition.nodes
   ('/GPCodedValueDomain2/CodedValues/CodedValue') AS CodedValues(codedValue)
  WHERE itemtypes.Name = 'Coded Value Domain' 
   AND items.Name = 'ZoningCodes') AS CodedValues
 ON molly.parcels.zoning = CodedValues.Code

In diesem Beispiel verwendet Materialspalte der Tabelle "distribmains" die Material-Domäne. Die Tabelle "distribmains" wird mit der Material-Domäne mit codierten Werten verbunden, um eine Liste der Domänencodes und der Beschreibungen zurückzugeben.

--Oracle

SELECT OBJECTID AS "Object ID", Value AS "Material"
FROM DISTRIBMAINS LEFT OUTER JOIN
 (SELECT
   EXTRACTVALUE(CodedValues.COLUMN_VALUE, 'CodedValue/Code') AS Code,
   EXTRACTVALUE(CodedValues.COLUMN_VALUE, 'CodedValue/Name') AS Value
  FROM SDE.GDB_ITEMS_VW items INNER JOIN SDE.GDB_ITEMTYPES itemtypes 
  ON items.Type = itemtypes.UUID,
  TABLE(XMLSEQUENCE(XMLType(Definition).Extract
   ('/GPCodedValueDomain2/CodedValues/CodedValue'))) CodedValues
  WHERE itemtypes.Name = 'Coded Value Domain' 
   AND items.Name = 'Material') CodedValues
 ON DISTRIBMAINS.MATERIAL = CodedValues.Code;


7/10/2012