---
title: "SQL-024: Retrieve all possible access groups for a user type"
summary: Retrieves all possible access groups for a user type with LEFT JOIN to existing membership rows.
status: draft
owner: <owner>
last_reviewed: 2026-07-24
library: SAIF.Business.External.Users
reference_type: package
---

# SQL-024: Retrieve all possible access groups for a user type

Retrieves all access groups defined for a user type code, LEFT-joining to existing `EXT_USER_ACCESS_GROUP` rows so that both assigned and unassigned groups are returned with their current assignment state.

## Classification

| Field | Value |
| --- | --- |
| **SQL ID** | SQL-024 |
| **Operation type** | Read |
| **Execution method** | Inline SQL |
| **Database** | Oracle |
| **Schema** | [unqualified]** |
| **Command type** | Text |
| **Business object** | `clsUserAccessGroup` |
| **Criteria property** | Local SQL |
| **Lifecycle method** | `GetAllPossibleUserAccessGroups` |

## Parameters

| Parameter | Direction | Type | Max length | Description |
| --- | --- | --- | --- | --- |
| `:UserTypeID` | Input | Decimal | N/A | `EXT_USER_TYPE_SEQ_NUM` for the LEFT JOIN. |
| `:UserTypeCode` | Input | String | 5 | User type code to filter access group definitions. |
| `:CultureCode` | Input | String | 5 | Culture code for globalized description. |

## Tables

| Table | Access | Columns used |
| --- | --- | --- |
| [EXT_USER_TYPE_ACCESS_GROUP](../database-tables.md#ext_user_type_access_group) | SELECT | All flag and sort-order columns |
| [EXT_USER_ACCESS_GROUP_CODE](../database-tables.md#ext_user_access_group_code) | JOIN | `CODE`, `CODE_DESCR` |
| [EXT_USER_ACCESS_GROUP](../database-tables.md#ext_user_access_group) | LEFT JOIN | `EXT_USER_ACCESS_GROUP_CODE`, `EXT_USER_TYPE_SEQ_NUM`, `EXT_USER_ACCESS_GROUP_SEQ_NUM` |
| [EXT_USER_ACCESS_GROUP_GCODE](../database-tables.md#ext_user_access_group_gcode) | LEFT OUTER JOIN | `CODE`, `CULTURE_CODE`, `CODE_DESCR` |

## Sample SQL

```sql
SELECT
    CASE WHEN a.ext_user_access_group_seq_num IS NULL
         THEN 0 ELSE a.ext_user_access_group_seq_num
    END AS UserAccessGroupID,
    :UserTypeID AS UserTypeID,
    tag.ext_user_type_code AS UserTypeCode,
    agc.CODE AS AccessGroupCode,
    agc.code_descr AS AccessGroupDescription,
    a.EXPIRATION_DATE AS ExpirationDate,
    a.DEFAULT_ACCESS_FLAG AS IsDefaultAccess,
    tag.ADMIN_ACCESS_FLAG AS CanAdminAccess,
    tag.STEWARD_ACCESS_FLAG AS CanStewardAccess,
    tag.SELF_REG_ACCESS_FLAG AS CanSelfRegistrationAccess,
    tag.SYSTEM_CONTROLLED_FLAG AS IsControlledBySystem,
    tag.DEFAULT_STATUS_FLAG AS DefaultStatus,
    tag.SORT_ORDER_NUM AS SortOrder,
    a.CREATE_USER AS CreateUser,
    a.CREATE_DATE AS CreateDate,
    a.UPDATE_USER AS UpdateUser,
    a.UPDATE_DATE AS UpdateDate,
    a.UPDATE_NUM AS UpdateNum,
    '<AccessType>' AS AccessType
FROM ext_user_type_access_group tag
JOIN ext_user_access_group_code agc
    ON tag.ext_user_access_group_code = agc.code
LEFT JOIN ext_user_access_group a
    ON a.ext_user_access_group_code = agc.code
    AND a.ext_user_type_seq_num = :UserTypeID
LEFT OUTER JOIN ext_user_access_group_gcode aggc
    ON (agc.code = aggc.code AND upper(AGGC.CULTURE_CODE) = :CultureCode)
WHERE upper(tag.ext_user_type_code) = :UserTypeCode
ORDER BY tag.SYSTEM_CONTROLLED_FLAG, tag.SORT_ORDER_NUM
```

## Operations and processes
- [User access group management](../operations/user-access-group-management.md)

> **Note:** Statements marked with `*` were inferred from code structure, naming conventions, or contextual evidence where direct confirmation was not available in source artifacts. Statements marked with `**` could not be confirmed; treat as unknown until verified.

## Sources
- `Business\SAIF.Business.External.Users\clsUserAccessGroup.vb`
