2016-10-26 2 views
0

Я пытаюсь написать запрос, который вернет номер заказа, если в транзакции не будет нескольких номеров заказов, которые должны будут вернуть слово Multiple. Я получаю группу, не могу содержать агрегат, но, если я ее выберу, он говорит, что неагрегатные значения должны быть частью связанной группы. Есть идеи? Ниже код, что я в настоящее времяКоличество случаев, когда Teradata SQL

Select 
s.Loc_id as Loc_ID 
,lh.loc_nbr as Store_Nbr 
,s.sltrn_dt as Sales_date 
,s.rgstr_sls_post_dt as Sales_Post_Date 
,s.sltrn_id As Trans_ID 
,s.sls_tm as Sales_Time 
,zeroifnull(HDISS_TAX_EXMPT_ID) as Exempt_ID 
,sum(net_ce_sls_amt) 
,sum(mkdn_amt) 
,sum(tax_amt) 
,sum(grs_sls_amt) 
,sr.cust_ord_nbr 


FROM PR_US_SALES_UNSEC_VIEWS.SLTRN s 

join 
PR_US_SALES_UNSEC_VIEWS.SLTRN_TAX_EXMPT ste 
on (s.loc_id = ste.loc_id and s.sltrn_dt = ste.sltrn_dt and s.pos_rgstr_id = ste.pos_rgstr_id and s.sltrn_id = ste.sltrn_id) 

join 
pr_shrd_views.loc_hier lh 
on(s.loc_id = lh.loc_id) 

join pr_us_sales_unsec_views.sltrn_rsm sr 
on (s.loc_id = sr.loc_id and s.sltrn_dt = sr.sltrn_dt and s.pos_rgstr_id = sr.pos_rgstr_id and s.sltrn_id = sr.sltrn_id) 

where s.sltrn_dt between '2012-07-06' and current_date 
--and lh.loc_nbr in (1501, 1523, 1528, 1551) 
and trans_typ_cd in (1,3) 
and trans_stat_cd = 1 
and ipv_flg= 'N' 

--HAVING COUNT(cust_ord_nbr) > 1 

Group by 1,2,3,4,5,6,7,12 
+0

Вы должны добавить, что в том, пункт ... – Teja

+0

показать весь код запроса – scaisEdge

+0

Я обновил код –

ответ

1

Когда вы раскомментировать HAVING (который должен быть после GROUP BY), необходимо удалить cust_ord_nbr из GROUP BY и применить агрегатную функцию в списке выбора, например, MIN(cust_ord_nbr).

На основании вашего рассказа вы хотите что-то вроде этого:

select 
... 
    ,sum(grs_sls_amt) 
    ,case 
     when COUNT(DISTINCT cust_ord_nbr) > 1 
     then 'multiple' 
     else trim(min(sr.cust_ord_nbr) 
    end 
FROM PR_US_SALES_UNSEC_VIEWS.SLTRN s 
... 
Group by 1,2,3,4,5,6,7 
+0

работал отлично! Спасибо! –

0
SELECT Order_Nbr 
    FROM YourTable 
GROUP BY Order_Nbr 
HAVING COUNT(cust_ord_nbr) > 1; 
Смежные вопросы