最近有個專案需要做資料匯出(基於底層寬表),具體業務邏輯在這就不詳細介紹,以下是具體實現方案:
列轉換–方案一 case when 與max 或sum
select *
from (select dzgs_dqbm,
max(bs_wks) bs_wks,
max(bs_jxz) bs_jxz,
max(bs_ywc) bs_ywc,
max(bs_wks_ztdm) wks_ztdm,
max(bs_jxz_ztdm) bs_jxz_ztdm,
max(bs_ywc_ztdm) bs_ywc_ztdm,
bsz_ztdm
from (select a.dzgs_dqbm,
case when a.baoshui_zt =『0』 then 『bs_wks』 end bs_wks,
case when a.baoshui_zt =『1』 then 『bs_jxz』 end bs_jxz,
case when a.baoshui_zt =『2』 then 『bs_ywc』 end bs_ywc,
case when a.baoshui_zt =『0』 then a.baoshui_ztdm end bs_wks_ztdm,
case when a.baoshui_zt =『1』 then a.baoshui_ztdm end bs_jxz_ztdm,
case when a.baoshui_zt =『2』 then a.baoshui_ztdm end bs_ywc_ztdm,
b.bsz_ztdm
from (select dzgs_dqbm,
baoshui_zt,
count(k_ztdm) baoshui_ztdm
from dwb_business_status_list
where dt =『20181008』 and sbcz = 『1』
and ty_kjnd is null
and k_nf=『2018』 and k_yf=『9』
group by dzgs_dqbm,baoshui_zt ) a left join (select dzgs_dqbm,count(k_ztdm) bsz_ztdm from dwb_business_status_list where dt =『20181008』 and sbcz = 『1』 and ty_kjnd is null and k_nf=『2018』 and k_yf=『9』 group by dzgs_dqbm) b
on a.dzgs_dqbm=b.dzgs_dqbm ) q
group by dzgs_dqbm,bsz_ztdm ) c inner join ( select dzgs_dqbm,
max(jz_wks) jz_wks,
max(jz_jxz) jz_jxz,
max(jz_ywc) jz_ywc,
max(jz_wks_ztdm) jz_wks_ztdm,
max(jz_jxz_ztdm) jz_jxz_ztdm,
max(jz_ywc_ztdm) jz_ywc_ztdm,
jzz_ztdm
from (select a.dzgs_dqbm,
case when a.jizhang_zt=『0』 then 『jz_wks』 end jz_wks,
case when a.jizhang_zt=『1』 then 『jz_jxz』 end jz_jxz,
case when a.jizhang_zt=『2』 then 『jz_ywc』 end jz_ywc,
case when a.jizhang_zt=『0』 then a.jizhang_ztdm end jz_wks_ztdm,
case when a.jizhang_zt=『1』 then a.jizhang_ztdm end jz_jxz_ztdm,
case when a.jizhang_zt=『2』 then a.jizhang_ztdm end jz_ywc_ztdm,
b.jzz_ztdm
from (select dzgs_dqbm,
jizhang_zt,
count(k_ztdm) jizhang_ztdm
from dwb_business_status_list
where dt =『20181008』 and sbcz = 『1』 and ty_kjnd is null and k_nf=『2018』 and k_yf=『9』
group by dzgs_dqbm,jizhang_zt ) a inner join ( select dzgs_dqbm, count(k_ztdm) jzz_ztdm from dwb_business_status_list where dt =『20181008』 and sbcz = 『1』 and ty_kjnd is null and k_nf=『2018』 and k_yf=『9』 group by dzgs_dqbm) b
on a.dzgs_dqbm=b.dzgs_dqbm ) m
group by dzgs_dqbm,jzz_ztdm ) d
on c.dzgs_dqbm=d.dzgs_dqbm;
–方案二
–列轉換 用if函式 if(jizhang_zt=『0』,1,0)
select
dzgs_dqbm,
sum(if(jizhang_zt=『0』,1,0)) jizhang_zt_0,
sum(if(jizhang_zt=『1』,1,0)) jizhang_zt_1,
sum(if(jizhang_zt=『2』,1,0)) jizhang_zt_2,
sum(if(baoshui_zt=『0』,1,0)) baoshui_zt_0,
sum(if(baoshui_zt=『1』,1,0)) baoshui_zt_1,
sum(if(baoshui_zt=『2』,1,0)) baoshui_zt_2,
count(1)
from biz_dw.dwb_business_status_list
where dt =『20181008』 and sbcz = 『1』
and ty_kjnd is null
and k_nf=『2018』 and k_yf=『9』
group by dzgs_dqbm
hive列轉行案例
1 函式說明 explode col 將 hive 一列中複雜的 array 或者 map 結構拆分成多行。lateral view 用法 lateral view udtf expression tablealias as columnalias 解釋 用於和 split,explode 等 ud...
hive 列轉行 HQL 行轉列,列轉行
1 相關函式 concat string a col,string b col 返回輸入字串連線後的結果,支援任意個輸入字串 concat ws separator,str1,str2,它是乙個特殊形式的 concat 第乙個引數剩餘引數間的分隔符。分隔符可以是與剩餘引數一樣的字串。如果分隔符是 n...
函式 Hive 行轉列 和 列轉行
在hive實際開發過程中,我們會遇到 行轉列 和 列轉行 的場景。比如 1 需要取 訂單號 對應的所有商品 sku號 商品 sku號 放在一列,即從table1查詢出table2 2 當商品 sku號 均在一列的時候,需要查詢每個 sku號 對應的 訂單號 即從table2查詢出table1。實現方...