2016-12-03 74 views
0

我需要在蜂巢执行此查询:SemanticException [错误10025]:蜂巢式不是在GROUP BY键

SELECT 
    waybill_no, 
    vehicle_no, 
    WAYBILL_TYPE, 
    etim_no, 
    trip_no, 
    route_no, 
    sum(full_ticket_count) as full_ticket_count, 
    sum(half_ticket_count) as half_ticket_count, 
    sum(BOT_ticket_count) as BOT_ticket_count, 
    sum(manual_ticket_count) as manual_ticket_count, 
    sum(window_booking_count) as window_booking_count, 
    sum(pass_ticket_count) as pass_ticket_count, 
    sum(luggage_ticket_count) as luggage_ticket_count, 
    format((sum(base_fare)/100),2) as base_fare, 
    format((sum(asc_amt-ysy_amt)/100),2) as asc_amt, 
    format((sum(ysy_amt)/100),2) as ysy_amt, 
    format((sum(bsc)/100),2) as bsc, 
    format((sum(toll)/100),2) as toll, 
    format((sum(it)/100),2) as it, 
    format((sum(sleeper)/100),2) as sleeper, 
    format((sum(toll_fee)/100),2) as toll_fee, 
    format((sum(bus_stand_fee)/100),2) as bus_stand_fee, 
    sum(insp_ticket_count) as insp_ticket_count, 
    sum(insp_ticket_amt) as insp_ticket_amt, 
    sum(dhaba_collection) as dhaba_collection, 
    sum(window_booking) as window_booking, 
    format((sum(penalty_amt)/100),2) as penalty_amt, 
    format((sum(luggage_amt)/100),2) as luggage_amt, 
    format((sum(total_amount)/100),2) as total_amount, 
    format((sum(total_expenses)/100),2) as total_expenses 
FROM (
    SELECT 
     td.waybill_no, 
     td.vehicle_no, 
     wb.WAYBILL_TYPE, 
     td.etim_no, 
     td.trip_no, 
     route_no, 
     sum(if (ticket_code IN('TO','BS','FX','CR'),0,full_ticket_count)) as full_ticket_count, 
     sum(if (ticket_code IN('TO','BS','FX','CR'),0,half_ticket_count)) as half_ticket_count, 
     sum(if (ticket_code IN('FX','CR'),0,1)) as BOT_ticket_count, 
     '0' as manual_ticket_count, 
     sum(if (ticket_code='WI',1,0)) as window_booking_count, 
     sum(if (ticket_code='PS',(full_ticket_count+half_ticket_count),0)) as pass_ticket_count, 
     sum(luggage_ticket_count) as luggage_ticket_count, 
     sum(if (td.ticket_code IN('TO','BS','FX','CR'),0,((full_ticket_count*adult_basic_fare)+(half_ticket_count*child_basic_fare)))) as base_fare, 
     sum(if (td.ticket_code IN('TO','BS','FX','CR'),0,((full_ticket_count*td.asc_amt)+(half_ticket_count*td.asc_amt)))) as asc_amt, 
     sum( 
      if (
       ticket_code IN('TO','BS'),0,((
        if(ticket_code IN('WI'),1,full_ticket_count) * state_code_10 
       )+(
        if(ticket_code IN('WI'),0,half_ticket_count)*state_code_10 
       )) 
      ) 
     ) as ysy_amt, 
     sum(if(td.ticket_code IN('TO','BS','FX','CR'),0,((full_ticket_count*td.bsc_amt)+(half_ticket_count*td.bsc_amt)))) as bsc, 
     sum(if(td.ticket_code IN('TO','BS','FX','CR'),0,((full_ticket_count*td.toll_amt)+(half_ticket_count*td.toll_amt)))) as toll, 
     sum(if(td.ticket_code IN('TO','BS','FX','CR'),0,((full_ticket_count*td.it_amt)+(half_ticket_count*td.it_amt)))) as it, 
     sum(if(td.ticket_code IN('TO','BS','FX','CR'),0,((full_ticket_count*td.sleeper_amt)+(half_ticket_count*td.sleeper_amt)))) as sleeper, 
     sum(if(td.ticket_code='TO',(td.total_amount),0)) as toll_fee, 
     sum(if(td.ticket_code='BS',(td.total_amount),0)) as bus_stand_fee, 
     sum(if(td.ticket_code='IP',full_ticket_count,0)) as insp_ticket_count, 
     sum(if(td.ticket_code='IP',(td.total_amount),0)) as insp_ticket_amt, 
     sum(if(td.ticket_code='DC',(td.total_amount),0)) as dhaba_collection, 
     sum(if(td.ticket_code='WI',(td.total_amount),0)) as window_booking, 
     sum(if(td.ticket_code='PN',(td.total_amount),0)) as penalty_amt, 
     sum(if(td.ticket_code='LG',(td.total_amount),0)) as luggage_amt, 
     sum( 
      if(
       td.ticket_code IN('TO','BS','FX','CR'),0,td.total_amount 
      ) + if(
       ticket_code='PA',adult_basic_fare,0 
      ) - if(
       ticket_code='DC',if(docket_no='SBICARD',(total_amount),0),0 
      ) 
     ) as total_amount, 
     sum( 
      if(
       td.ticket_code NOT IN('TO','BS','WI'),0,td.total_amount 
      )+if(
       td.ticket_code='PA',((full_ticket_count*adult_basic_fare)+(half_ticket_count*child_basic_fare)),0 
      )+if(
       e_purse_flag='1',total_amount,0 
      ) 
     ) as total_expenses, 
     td.ticket_code 
    FROM ticket_data as td 
    INNER JOIN waybillprogramming wb on wb.waybill_no=td.waybill_no 
    WHERE wb.collection_tm between str_to_date('2016-07-11 00:00:00','%Y-%m-%d %H:%i:%s') and str_to_date('2016-07-11 23:59:59','%Y-%m-%d %H:%i:%s') AND td.`ticket_type` != '51' 
    GROUP BY wb.waybill_no 

    UNION 

    SELECT 
     wb.waybill_no, 
     '' as vehicle_no, 
     wb.WAYBILL_TYPE, 
     wb.etim_no , 
     '0' as trip_no, 
     '0' as route_no, 
     '0' as full_ticket_count, 
     '0' as half_ticket_count,sum(NO_OF_PASSENGER) as BOT_ticket_count, 
     '0' as manual_ticket_count, 
     '0' as window_booking_count, 
     '0' as pass_ticket_count, 
     '0' as luggage_ticket_count, 
     '0' as base_fare, 
     '0' as asc_amt, 
     '0' as ysy_amt, 
     '0' as bsc, 
     '0' as toll, 
     '0' as it, 
     '0' as sleeper, 
     '0' as toll_fee, 
     '0' as bus_stand_fee, 
     '0' as insp_ticket_count, 
     '0' as insp_ticket_amt, 
     '0' as dhaba_collection, 
     '0' as window_booking, 
     '0' as penalty_amt, 
     '0' as luggage_amt, 
     (sum(TICKET_SALE_AMOUNT + RECOVERY_AMT + DHABA_COLLECTION) * 100) as total_amount, 
     (sum(mtc.BRIDGE_FEE + mtc.BUS_STAND_FEE + mtc.REFUND_AMT + mtc.DIESEL_PERCHASED + mtc.OTHER_EXPENSES + mtc.OTHER_BOOKING + mtc.PART_CASH) * 100) as total_expenses, 
     'NN' as ticket_code 
    FROM manual_ticket_collection mtc 
    INNER JOIN waybillprogramming wb on mtc.WAYBILL_NO = wb.WAYBILL_NO 
    WHERE collection_tm between str_to_date('2016-07-11 00:00:00','%Y-%m-%d %H:%i:%s') and str_to_date('2016-07-11 23:59:59','%Y-%m-%d %H:%i:%s') 
    GROUP BY wb.waybill_no 

    UNION 

    SELECT 
     wb.waybill_no, 
     '' as vehicle_no, 
     wb.WAYBILL_TYPE, 
     wb.etim_no, 
     '0' as trip_no, 
     '0' as route_no, 
     '0' as full_ticket_count, 
     '0' as half_ticket_count, 
     '0' as BOT_ticket_count, 
     count(ticket_code) as manual_ticket_count, 
     sum(if(ticket_code='WI',(full_ticket+half_ticket),0)) as window_booking_count, 
     sum(if(ticket_code='PS',(full_ticket+half_ticket),0)) as pass_ticket_count, 
     sum(lugg_ticket) as luggage_ticket_count, 
     sum(if(mtd.ticket_code IN('TO','BS'),0,((full_ticket*full_base_fare)+(half_ticket*half_base_fare)))*100) as base_fare, 
     sum(if(mtd.ticket_code IN('TO','BS'),0,((full_ticket*mtd.asc_amt)+(half_ticket*mtd.asc_amt)))*100) as asc_amt, 
     '0' as ysy_amt, 
     sum(if(mtd.ticket_code IN('TO','BS'),0,((full_ticket*mtd.bsc_amt)+(half_ticket*mtd.bsc_amt)))*100) as bsc, 
     sum(if(mtd.ticket_code IN('TO','BS'),0,((full_ticket*mtd.toll_amt)+(half_ticket*mtd.toll_amt)))*100) as toll, 
     sum(if(mtd.ticket_code IN('TO','BS'),0,((full_ticket*mtd.it_amt)+(half_ticket*mtd.it_amt)))*100) as it, 
     sum(if(mtd.ticket_code IN('TO','BS'),0,((full_ticket*mtd.sleeper_amt)+(half_ticket*mtd.sleeper_amt)))*100) as sleeper, 
     sum(if(mtd.ticket_code='TO',(mtd.total_amt),0)) as toll_fee, 
     sum(if(mtd.ticket_code='BS',(mtd.total_amt),0)*100) as bus_stand_fee, 
     sum(if(mtd.ticket_code='IP',full_ticket,0)) as insp_ticket_count, 
     sum(if(mtd.ticket_code='IP',(mtd.total_amt),0)*100) as insp_ticket_amt, 
     sum(if(mtd.ticket_code='DC',(mtd.total_amt),0)) as dhaba_collection, 
     sum(if(mtd.ticket_code='WI',(mtd.total_amt),0)) as window_booking, 
     sum(if(mtd.ticket_code='PN',(mtd.total_amt),0)*100) as penalty_amt, 
     sum(if(mtd.ticket_code='LG',(mtd.total_amt),0)*100) as luggage_amt, 
     sum(total_amt*100) as total_amount, 
     sum((if(ticket_code='TO', total_amt,0)+if(ticket_code='BS', total_amt,0))*100) as total_expenses, 
     mtd.ticket_code 
    FROM manual_ticket_details mtd 
    INNER JOIN waybillprogramming wb on mtd.WAYBILL_NO = wb.WAYBILL_NO 
    WHERE collection_tm between str_to_date('2016-07-11 00:00:00','%Y-%m-%d %H:%i:%s') and str_to_date('2016-07-11 23:59:59','%Y-%m-%d %H:%i:%s') 
    GROUP BY wb.waybill_no 
)abc 
GROUP BY waybill_no; 

但是我正在执行查询

失败时收到此错误:行35:2的表达不 GROUP BY键 'waybill_no')

回答

1

您选择td.waybill_no和分组。因为它是一个内部加入尝试选择wb.waybill_no

+0

但是现在我得到此错误: 'SemanticException [错误10025]:行36:2表达式不在GROUP BY键'vehicle_no')' – Mohan

+0

您需要阅读关于Group By子句。当一个group by被应用的时候,只有那些行被分组的列才能被选中,在第一个内部查询中,我没有看到你在td.vehicle_no上分组。这不是一个蜂巢式的东西,它是一个简单的SQL逻辑。 –

+0

你的意思是我将不得不为我所选择的所有列添加group by? – Mohan