2017-02-12 3 views
0

Я хочу объединить две колонки в одной колонке в оракуле. У меня по этой ссылке: this . Этот запрос:Oracle-Why показать эту ошибку "ORA-00904:" OUTLET_STATUS ": недопустимый идентификатор" в комбинированном столбце?

SELECT T6.ITEM_GROUP_NAME,T7.ZONE_NAME,T5.SR_NAME, T5.SR_ID, T5.MOBILE_NO ,T3.ROUTE_NAME ,T1.OUTLET_NAME, T1.OUTLET_ADDRESS, T1.PROPRITOR_NAME, T1.MOBILE_NUMBER , T2.STATUS || T8.REASON as OUTLET_STATUS, 
        SUM(((T2.ITEM_CTN*T4.FACTOR)+ T2.ITEM_QTY)*T2.OUT_PRICE)AS AMOUNT 
        FROM T_OUTLET T1 , T_ORDER_DETAIL T2, T_ROUTE T3 , T_ITEM T4 , T_SR_INFO T5 , T_ITEM_GROUP T6 ,T_ZONE T7 , T_NON_PRODUCTIVE_SALES T8 
        WHERE T6.ITEM_GROUP_ID='000200000' and T7.ZONE_ID='Z002' and T5.SR_ID= '174369' and T2.OUTLET_ID=T1.OUTLET_ID AND T3.ROUTE_ID = T2.ROUTE_ID AND T2.STATUS='Y' and T2.ENTRY_DATE= TO_DATE('11/02/2017','dd/mm/yyyy') and T2.ITEM_ID=T4.ITEM_ID and T8.ENTRY_DATE= TO_DATE('11/02/2017','dd/mm/yyyy') and T8.SR_ID = '174369' and T2.OUTLET_ID= T8.OUTLET_ID 
        GROUP BY T6.ITEM_GROUP_NAME,T7.ZONE_NAME,T5.SR_NAME, T5.SR_ID, T5.MOBILE_NO ,T2.ENTRY_DATE , T2.OUTLET_ID,T3.ROUTE_NAME ,T1.OUTLET_NAME, T1.OUTLET_ADDRESS, T1.PROPRITOR_NAME, T1.MOBILE_NUMBER , OUTLET_STATUS 
        ORDER BY T1.OUTLET_NAME 

Но когда я делаю это, он показывает сообщение об ошибке:

ORA-00904: "OUTLET_STATUS": invalid identifier

Где проблема?

ответ

1

Оценка group by происходит перед select, поэтому group by не знает колонки с именем OUTLET_STATUS.

Изменение OUTLET_STATUS в вашем group by к T2.STATUS || T8.REASON:

select 
. . . 
group by T6.ITEM_GROUP_NAME, 
    T7.ZONE_NAME, 
    T5.SR_NAME, 
    T5.SR_ID, 
    T5.MOBILE_NO, 
    T2.ENTRY_DATE, 
    T2.OUTLET_ID, 
    T3.ROUTE_NAME, 
    T1.OUTLET_NAME, 
    T1.OUTLET_ADDRESS, 
    T1.PROPRITOR_NAME, 
    T1.MOBILE_NUMBER, 
    T2.status || T8.REASON --here 
order by T1.OUTLET_NAME 

Итак, ваш запрос будет выглядеть так:

select T6.ITEM_GROUP_NAME, 
    T7.ZONE_NAME, 
    T5.SR_NAME, 
    T5.SR_ID, 
    T5.MOBILE_NO, 
    T3.ROUTE_NAME, 
    T1.OUTLET_NAME, 
    T1.OUTLET_ADDRESS, 
    T1.PROPRITOR_NAME, 
    T1.MOBILE_NUMBER, 
    T2.status || T8.REASON as OUTLET_STATUS, 
    SUM(((T2.ITEM_CTN * T4.FACTOR) + T2.ITEM_QTY) * T2.OUT_PRICE) as AMOUNT 
from T_OUTLET T1, 
    T_ORDER_DETAIL T2, 
    T_ROUTE T3, 
    T_ITEM T4, 
    T_SR_INFO T5, 
    T_ITEM_GROUP T6, 
    T_ZONE T7, 
    T_NON_PRODUCTIVE_SALES T8 
where T6.ITEM_GROUP_ID = '000200000' 
    and T7.ZONE_ID = 'Z002' 
    and T5.SR_ID = '174369' 
    and T2.OUTLET_ID = T1.OUTLET_ID 
    and T3.ROUTE_ID = T2.ROUTE_ID 
    and T2.status = 'Y' 
    and T2.ENTRY_DATE = TO_DATE('11/02/2017', 'dd/mm/yyyy') 
    and T2.ITEM_ID = T4.ITEM_ID 
    and T8.ENTRY_DATE = TO_DATE('11/02/2017', 'dd/mm/yyyy') 
    and T8.SR_ID = '174369' 
    and T2.OUTLET_ID = T8.OUTLET_ID 
group by T6.ITEM_GROUP_NAME, 
    T7.ZONE_NAME, 
    T5.SR_NAME, 
    T5.SR_ID, 
    T5.MOBILE_NO, 
    T2.ENTRY_DATE, 
    T2.OUTLET_ID, 
    T3.ROUTE_NAME, 
    T1.OUTLET_NAME, 
    T1.OUTLET_ADDRESS, 
    T1.PROPRITOR_NAME, 
    T1.MOBILE_NUMBER, 
    T2.status || T8.REASON -- here 
order by T1.OUTLET_NAME 
+0

Спасибо, это работает :) –