我有一个列出并发程序ID和名称的表。但是,该表允许每个程序ID使用多个名称。我需要报告有关程序的一些数据,但是无法正确显示它,因为程序名称是在Tableau中显示和分组的。
所以我需要的是从表中提取每个程序ID的名字的方法。因为我在我的输出中包含程序名称,所以我不能使用unique(它不会过滤替代名称)&我不能使用连接,因为没有唯一的匹配。
答案 0 :(得分:1)
为每个id获取(按字母顺序排列)名字的几个选项(效率不同)。
Oracle 11g R2架构设置:
CREATE TABLE PROGRAMS ( ID, NAME ) AS
SELECT 1, 'Charlie' FROM DUAL
UNION ALL SELECT 1, 'Bob' FROM DUAL
UNION ALL SELECT 1, 'Alice' FROM DUAL
UNION ALL SELECT 2, 'Ed' FROM DUAL
UNION ALL SELECT 2, 'Doris' FROM DUAL
UNION ALL SELECT 3, 'Fern' FROM DUAL
UNION ALL SELECT 3, 'Godfrey' FROM DUAL;
查询1 :
SELECT ID,
MIN( NAME ) AS NAME
FROM PROGRAMS
GROUP BY ID
ORDER BY ID
<强> Results 强>:
| ID | NAME |
|----|-------|
| 1 | Alice |
| 2 | Doris |
| 3 | Fern |
查询2 :
SELECT DISTINCT
ID,
FIRST_VALUE( NAME ) OVER ( PARTITION BY ID ORDER BY NULL ) AS NAME
FROM PROGRAMS
ORDER BY ID
<强> Results 强>:
| ID | NAME |
|----|-------|
| 1 | Alice |
| 2 | Doris |
| 3 | Fern |
查询3 :
SELECT ID,
NAME
FROM PROGRAMS p
WHERE NOT EXISTS ( SELECT 'X'
FROM PROGRAMS x
WHERE p.ID = x.ID
AND p.NAME > x.NAME )
ORDER BY ID
<强> Results 强>:
| ID | NAME |
|----|-------|
| 1 | Alice |
| 2 | Doris |
| 3 | Fern |