金額分攤sql
先設定倆表
--表T1為鋼水總金額表
create table T1
(
LH VARCHAR2(4) not null, --鋼水爐號
P NUMBER(10,2) not null, --鋼水總金額
GSL NUMBER(8,2) --總鋼水量
);
alter table T1
add constraint T1 primary key (LH));
資料如下:
LH P GSL
0001 100000.00 100.11
0002 50000.00 80.99
--表T2為澆鑄後資訊表
create table T2
(
LH VARCHAR2(4) not null, --鋼水爐號
P NUMBER(10,2), --鋼水金額
GSL NUMBER(8,2) --鋼水量
);
資料如下:
LH GSL P
0001 50.00
0001 40.00
0001 10.11
0002 30.00
0002 25.00
0002 25.99
根據表T1的資料來計算表T2的P欄位,計算公式為:每一行的T2.P = T1.P * T2.GSL /T1.GSL 但是要注意這樣計算後的結果相加與表T1的金額數會有差值的問題。
解決方案,程式碼如下:
--表T1為鋼水總金額表
create table T1
(
LH VARCHAR2(4) not null, --鋼水爐號
P NUMBER(10,2) not null, --鋼水總金額
GSL NUMBER(8,2) --總鋼水量
);
alter table T1
add constraint T1 primary key (LH));
資料如下:
LH P GSL
0001 100000.00 100.11
0002 50000.00 80.99
--表T2為澆鑄後資訊表
create table T2
(
LH VARCHAR2(4) not null, --鋼水爐號
P NUMBER(10,2), --鋼水金額
GSL NUMBER(8,2) --鋼水量
);
資料如下:
LH GSL P
0001 50.00
0001 40.00
0001 10.11
0002 30.00
0002 25.00
0002 25.99
根據表T1的資料來計算表T2的P欄位,計算公式為:每一行的T2.P = T1.P * T2.GSL /T1.GSL 但是要注意這樣計算後的結果相加與表T1的金額數會有差值的問題。
解決方案,程式碼如下:
點選(此處)摺疊或開啟
-
create table T1
-
(
-
LH VARCHAR2(4) not null, --鋼水爐號
-
P NUMBER(10,2) not null, --鋼水總金額
-
GSL NUMBER(8,2) --總鋼水量
-
);
-
INSERT INTO t1 VALUES('0001',100000.00,100.11);
-
INSERT INTO t1 VALUES('0002',50000.00,80.99);
-
-
create table T2
-
(
-
LH VARCHAR2(4) not null, --鋼水爐號
-
P NUMBER(10,2), --鋼水金額
-
GSL NUMBER(8,2) --鋼水量
- );
-
INSERT INTO t2(lh,gsl) VALUES('0001',50.00);
-
INSERT INTO t2(lh,gsl) VALUES('0001',40.00);
-
INSERT INTO t2(lh,gsl) VALUES('0001',10.11);
-
INSERT INTO t2(lh,gsl) VALUES('0002',30.00);
-
INSERT INTO t2(lh,gsl) VALUES('0002',25.00);
-
INSERT INTO t2(lh,gsl) VALUES('0002',25.99);
-
-
SELECT t2.lh
-
,t2.gsl
-
,TRUNC(t1.p * t2.gsl / t1.gsl,2) -- 捨棄小數點2位之後
-
+(CASE WHEN ROW_NUMBER() OVER(PARTITION BY t2.lh ORDER BY t2.gsl DESC) --- 按順序排列,前面的攤到0.01, 後面的就沒有了
-
<=(t1.p - SUM(TRUNC(t1.p * t2.gsl / t1.gsl,2)) OVER(PARTITION BY t2.lh))*100
-
THEN 0.01
-
ELSE 0
-
END) AS t2_p
-
FROM t1, t2
- WHERE t1.lh = t2.lh;
-
- --查詢結果如下
-
LH GSL T2_P
1 0001 50.00 49945.07
2 0001 40.00 39956.04
3 0001 10.11 10098.89
4 0002 30.00 18520.81
5 0002 25.99 16045.19
6 0002 25.00 15434
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/21251711/viewspace-2122546/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 小寫轉大寫金額[SQL SERVER] (轉)SQLServer
- 資料多次分攤方案二
- plsql小寫金額轉大寫金額函式SQL函式
- 金額轉換
- 小寫轉大寫金額儲存過程[SQL SERVER]儲存過程SQLServer
- 阿拉伯數字金額轉漢語金額- Swift版本Swift
- iOS金額輸入限制iOS
- 阿拉伯數字轉換成金額大寫金額(包括小數)
- CO聯產品成本差異分攤計算邏輯
- JS金額正規表示式JS
- Java 金額正規表示式Java
- EditText輸入金額型別型別
- 金額大小寫轉換(3)
- 金額大寫轉換(轉)
- 大寫金額轉換 (轉)
- 金額大寫轉換(摘)
- 將金錢的金額轉換為大寫形式
- JavaScript將輸入的數字金額轉換成對應的中文大寫金額JavaScript
- 金額轉換出現的BUG
- js核算輸入是否為金額JS
- Swift 3 銀行金額驗證Swift
- 擺攤江湖:用資料思維拆解擺攤經濟
- 【OracleEBS】 科目餘額SQLOracleSQL
- 公積金餘額查詢電話
- JavaScript 人民幣金額格式轉換JavaScript
- 小寫金額轉換為大寫
- 使用正規表示式處理金額
- mysql自連線求累計金額MySql
- Excel金額小寫轉大寫公式Excel公式
- 總帳管理系統金額型別型別
- 小寫數字金額轉大寫
- 1.金額數字轉字元型別字元型別
- js金錢轉換為小額的功能JS
- 將金錢數額轉換為大寫
- 金額數值轉換為中文大寫
- 【踩坑系列】使用long型別處理金額,科學計數法導致金額轉大寫異常型別
- SQL分類SQL
- SQL分組SQL