SQL最基礎的語句,看看誰有能耐,肯定讓你大開眼界(100分)

  • 主题发起人 主题发起人 Delphiguanshui
  • 开始时间 开始时间
D

Delphiguanshui

Unregistered / Unconfirmed
GUEST, unregistred user!
大家不防可以說說想法,如被採用,會有驚喜。用SQL語句如何實現下例:
(注:CURRENCY_NO(幣別)是不固定的,)
Oracle 數據庫的格式:
SUPPLIER_NO CURRENCY_NO INSP_AMT APPLY_AMT
AM10007 RMB 3250.00 0.00
AM10010 RMB 4.00 20.00
AM10015 LIR 1.00 0.00
AM10015 RMB 1.00 0.00
AM50002 LIR 1.00 6.00
AM50002 NTD 1.00 40.00
AM50002 RMB 1.00 4.00
AM50002 USD 2.82 87.40
我要得到顯示的格式:

======RMB======== ========LIR======= ========NTD====== =======USD========
SUPPLIER_NO INSP_AMT APPLY_AMT INSP_AMT APPLY_AMT INSP_AMT APPLY_AMT INSP_AMT APPLY_AMT
AM10007 3250.00 0.00
AM10010 4.00 20.00
AM10015 1.00 0.00 1.00 0.00
AM50002 1.00 4.00 1.00 6.00 1.00 40.00 2.82 87.40

同時希望大家關注一下這個貼子,:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3877415
謝謝各位。。。
 
select supplier_no, sum(case when currency_no='RMB' then insp_amt else 0 end) as RMBinsp_amt, sum(case when currency_no='RMB' then apply_amt else 0 end) as RMBapply_amt, sum(case when currency_no='LIR' then insp_amt else 0 end) as LIRinsp_amt, sum(case when currency_no='LIR' then apply_amt else 0 end) as LIRapply_amt, sum(case when currency_no='NTD' then insp_amt else 0 end) as NTDinsp_amt, sum(case when currency_no='NTD' then apply_amt else 0 end) as NTDapply_amt, sum(case when currency_no='USD' then insp_amt else 0 end) as USDinsp_amt, sum(case when currency_no='USD' then apply_amt else 0 end) as USDapply_amt from Table1 group by supplier_no
大致上这个样子。你自己再加加工。
 
因为币种不固定,所以语句必须通过程序添加
1. 通过 select distinc CURRENCY_NO from table 得到列名
2. 动态添加 sql 语句,
add(select supplier_no)
for i:= to count(列名) do
add(sum(case when currency_no=列名[1] then insp_amt else 0 end) 列名)
 
谢谢两位.我试试...
 
用case 应该就可以实现了
 
樓上的正解
 
多人接受答案了。
 
后退
顶部