Using C# sbSQL.Append("SELECT t1.*, (select count(t2."); sbSQL.Append(ParentField); sbSQL.Append(") FROM "); sbSQL.Append(TableName); sbSQL.Append(" t2 where t2."); sbSQL.Append(ParentField); sbSQL.Append(" = t1."); sbSQL.Append(ChildField); sbSQL.Append(") as CHILDCOUNT, (select count(t3."); sbSQL.Append(ParentField); sbSQL.Append(") FROM "); sbSQL.Append(TableName); sbSQL.Append(" t3 where t1."); sbSQL.Append(ParentField); sbSQL.Append(" = t3."); sbSQL.Append(ChildField); sbSQL.Append(") as HASPARENT from "); sbSQL.Append(TableName); sbSQL.Append(" t1 "); OleDbDataAdapter adapter = new OleDbDataAdapter(sbSQL.ToString(), conn); adapter.SelectCommand.CommandType = CommandType.Text; DataSet ds = new DataSet(); adapter.Fill(ds); XmlDocument doc = new XmlDocument(); doc.LoadXml(ds.GetXml()); return doc; where: TableName is the table or the view that you would like to extract the XML data from. ChildField is the employee ID ParentField is the manager ID