2017-10-15 28 views
0

我被困在创建一个sql查询。选择查询中的显示列未按组添加子句

表:

XX_AR_RECEIPT_CREATE 

列:

RECEIPT_ID     
ENTITY      
LOG_ID      
ACTIVITY_ID    
FIN_CLASS     
RECEIPT_METHOD    
RECEIPT_AMOUNT    
RECEIPT_TYPE    
RECEIPT_NUMBER  
RECEIPT_DATE    
POSTED_DATE    
ACTIVITY_DATE    
SERVICE_DATE    
CASHIER_NAME    
CASHIER_USERNAME   
PAYMENT_REFERENCE_NUMBER 
DEPARTMENT     
SPECIALITY     
ACCOUNT     
STATUS      

这是我的查询

select to_char(sum(to_number(receipt_amount))) amount,entity, cashier_name, 
     receipt_method, fin_class,to_char(to_date(posted_date, 'dd/mm/yy HH24:MI:SS'), 'dd/mm/yy') as receipt_date 
from XX_AR_RECIPT_CREATE 
where to_number(receipt_amount)>0 and status='0' 
group by entity, cashier_name, receipt_method, 
     fin_class, to_char(to_date(posted_date,'dd/mm/yy HH24:MI:SS'), 'dd/mm/yy'); 

它的正常工作,问题是,我想添加一些额外的列例如LOG_ID 。但我不能在Group By子句中添加它。 EG:

select to_char(sum(to_number(receipt_amount))) amount, entity, cashier_name, 
     receipt_method, fin_class,to_char(to_date(posted_date, 'dd/mm/yy HH24:MI:SS'), 'dd/mm/yy') as receipt_date, 
     LOG_ID 
from XX_AR_RECIPT_CREATE 
where to_number(receipt_amount) > 0 and status = '0' 
group by entity, cashier_name, 
     receipt_method, fin_class, to_char(to_date(posted_date, 'dd/mm/yy HH24:MI:SS'), 'dd/mm/yy'); 

我有搜索在互联网上也为解决方案。内连接是一个很好的解决方案。但问题是我使用to_char(),所以我不能添加别名。我正在使用Oracle数据库11g快速版版本11.2.0.2.0 - 64位生产

回答

1

您需要决定需要哪个LOG_ID。例如,为了获得最低:

select to_char(sum(to_number(receipt_amount))) as amount, entity, cashier_name, 
     receipt_method, fin_class, 
     to_char(to_date(posted_date, 'dd/mm/yy HH24:MI:SS'), 'dd/mm/yy') as receipt_date, 
     min(LOG_ID) as LOG_ID 

或者让他们的列表(不是太长):

select to_char(sum(to_number(receipt_amount))) as amount, entity, cashier_name, 
     receipt_method, fin_class, 
     to_char(to_date(posted_date, 'dd/mm/yy HH24:MI:SS'), 'dd/mm/yy') as receipt_date, 
     listagg(LOG_ID, ',') within group (order by LOG_ID) as LOG_IDs 
+0

感谢@Gordon我只是忘了LISTAGG()。这将帮助我。 –