簡體   English   中英

Teradata SQL的大小寫計數

[英]Case Count When Teradata SQL

我正在嘗試編寫一個查詢,該查詢將帶回一個訂單號,除非該事務中有多個訂單號,這將需要返回單詞Multiple。 我得到的分組依據不能包含聚合,但是如果我將其刪除,則表示非聚合值必須是關聯的分組的一部分。 有任何想法嗎? 下面的代碼是我目前擁有的

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

當取消注釋HAVING(應在GROUP BY之后)時,您需要從GROUP BY中刪除cust_ord_nbr並在Select列表中應用一個聚合函數,例如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
SELECT Order_Nbr
  FROM YourTable
GROUP BY Order_Nbr
HAVING COUNT( cust_ord_nbr ) > 1;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM