在Oracle中按别名分组

h3g*_*0r_ 0 sql oracle group-by oracle10g

例

我需要得到所有状态(1,2,3,4)没有重复.

1 xxx
2 yyy
3 zzz
4 jjj
Run Code Online (Sandbox Code Playgroud)

我的第一个也是唯一的想法就是让所有的州和他们分组:

select state1 as state,desc1 as desc from table where id=X
Union
select state2 as state,desc2 as desc from table where id=X
Run Code Online (Sandbox Code Playgroud)

这样就可以获得6行示例.因此,为了丢弃副本,我尝试使用别名:

select state,desc from 
(
select state1 as state,desc1 as desc from table where id=X
    Union
    select state2 as state,desc2 as desc from table where id=X
)
group by state;
Run Code Online (Sandbox Code Playgroud)

但我得到的错误不是GROUP BY表达式.

我看到了类似的问题,但我无法解决问题.

Ale*_*ole 5

所有选择列表项都必须在组中,或者是聚合.你可以state, desc在group-by子句中包括两者,但是使用它会更简洁distinct; 但是,union(没有all)无论如何都要抑制重复,所以这里都不需要.

正如Bluefeet在其他地方提到的那样,desc是一个关键字,并且在order-by子句中有意义,因此它不是列或别名的好名称.

这有四行,而不是六行:

select state1 as state_x, desc1 as desc_x from t42 where id = 'X'
union
select state2 as state_x, desc2 as desc_x from t42 where id = 'X';

| STATE_X | DESC_X |
|---------|--------|
|       1 |    xxx |
|       2 |    yyy |
|       3 |    zzz |
|       4 |    jjj |
Run Code Online (Sandbox Code Playgroud)

SQL小提琴.目前尚不清楚为什么你认为你得到六行,或者你真正做的不同.