【发布时间】:2019-08-15 02:25:00
【问题描述】:
在 Oracle 11g 数据库中,我有一个名为 organizations 的表,如下所示:
| ORGANIZATION_ID | ORGANIZATION_NAME | TREE_ORGANIZATION_ID | ORGANIZATION_RANG |
|-----------------|-------------------|----------------------|-------------------|
| 1 | Facebook | \1 | 1 |
| 2 | Instagram | \1\2 | 2 |
| 3 | Whatsapp | \1\3 | 2 |
| 4 | Alphabet | \4 | 1 |
| 5 | Nest | \4\5 | 2 |
| 6 | Google | \4\6 | 2 |
| 7 | YouTube | \4\6\7 | 3 |
如您所见,此表有一个名为 TREE_ORGANIZATION_ID 的列,我在其中存储有关组织关系的信息。
此代码返回在 TREE_ORGANIZATION_ID 列中具有特定 ID 的所有组织。在我的情况下,此代码返回 Google 和 YouTube 条目。
SELECT
*
FROM
ORGANIZATIONS
WHERE
TREE_ORGANIZATION_ID LIKE '%\' || '6'
OR
TREE_ORGANIZATION_ID LIKE '%\' || '6' || '\%';
我想添加名为STATUS 的新列,如下所示:
| ORGANIZATION_ID | ORGANIZATION_NAME | TREE_ORGANIZATION_ID | ORGANIZATION_RANG | STATUS |
|-----------------|-------------------|----------------------|-------------------|----------|
| 6 | Google | \4\6 | 2 | root |
| 7 | YouTube | \4\6\7 | 3 | not root |
我尝试了下一个代码,但它引发了错误ORA-00937 not a single-group group function。
如何根据另一列的值创建新列?
SELECT
ORGANIZATION_ID,
ORGANIZATION_NAME,
TREE_ORGANIZATION_ID,
CASE
WHEN ORGANIZATION_RANG = MIN(ORGANIZATION_RANG) THEN 'root'
ELSE 'not root'
END AS STATUS
FROM
ORGANIZATIONS
WHERE
TREE_ORGANIZATION_ID LIKE '%\' || '6'
OR
TREE_ORGANIZATION_ID LIKE '%\' || '6' || '\%';
【问题讨论】:
-
ORGANIZATION_RANG = MIN(ORGANIZATION_RANG) ?