複数注文の場合の償却額の計算方法について
2022-01-09 10:07:19
この記事では、複数の注文の償却額を計算するための全体の流れを説明し、実行します。 データベース環境。sql server 2005. 以下、それを紹介します。
下図は、受注明細表で、既存金額を1700とし、受注番号に従って順に受注金額を償却していくものである。
オーダー6の支払いになると、支払いが足りず200しか払えず、次のオーダーの償却額は0となる。
1. 基本的なデータの準備
CREATE TABLE #t
( id INT ,
dingdan VARCHAR(20),
sale MONEY
)
INSERT INTO #t VALUES (1,'a',100);
INSERT INTO #t VALUES (2,'b',200);
INSERT INTO #t VALUES (3,'c',300);
INSERT INTO #t VALUES (4,'d',400);
INSERT INTO #t VALUES (5,'e',500);
INSERT INTO #t VALUES (6,'f',600);
INSERT INTO #t VALUES (7,'g',700);
INSERT INTO #t VALUES (8,'h',800);
INSERT INTO #t VALUES (9,'i',900);
INSERT INTO #t VALUES (10,'j',1000);
ソリューションのアイデア 以下の通りです。
各注文の前に償却する合計金額を計算し、今回の注文の償却する金額を足して1700と比較する。
合計が1700以下であれば、注文の全部を償却でき、そうでなければ、注文の一部だけを償却することができる。
つまり、1700-この注文以前のすべての注文の金額の合計です。
;WITH x1
AS ( SELECT t1.id ,
t1.dingdan ,
t1.sale ,
( SELECT ISNULL(SUM(t2.sale), 0)
FROM #t t2
WHERE t2.id < t1.id
) AS curr_sale_sum - the amount of all orders prior to this order
FROM #t t1
),/* Calculate the write-off amount*/
x2
AS ( SELECT id ,
dingdan ,
sale ,
CASE WHEN curr_sale_sum + sale <= 1700 THEN sale
ELSE 1700 - curr_sale_sum
END AS new_sale
FROM x1
)
/* If the write-off amount is negative, change it to 0*/
SELECT id AS serial number,
dingdan order,
sale order amount,
CASE WHEN new_sale < 0 THEN 0
ELSE new_sale
END AS write off amount
FROM x2
解析関数で解決できないので、スカラーサブクエリで同じ効果を得るしかない。もちろん、提供されるデータには、以下のような制限があります。
序数が連続していない場合、私のSQLを直接適用しても問題は解決せず、自分で連続した序数を生成する必要があります。
その結果は次のようになります。
以上が、複数注文の場合の償却額計算の解答です。
関連
-
SQL ServerにおけるRAISERRORの使用詳細
-
SQLServer 2005でサーバー名がない場合の2つの解決策
-
SQL Server 2005における外部結合の使用法
-
SQL Server 2005 で Try Catch を使って例外を処理する
-
SQL Server 2005のデータベースでtempdbの場所を変更する方法
-
文字列中の最大の部分的インクリメンタルを計算する SQL メソッド
-
SQL Server 2005でリモートデータベース接続を開く方法
-
win2003 ServerでSQL Server 2005のリモート接続を設定する方法
-
[オリジナル】SQL2005再ビルドインデックスストアドプロシージャ sp_rebuild_index
-
SQL Server 2005データベースミラーリング関連知識の簡単な説明
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Microsoft Sql server2005 のインストール手順のグラフィック詳細とよくある問題の解決法
-
SQL2005インストール時のバージョン変更チェックでSKUPGRADE=1が発生する問題の解決法
-
SQL Server 2005 復旧データベース詳細グラフィックチュートリアル
-
SQL Server 2005 ミラー構築マニュアル(sql2005 データベース同期ミラーリングソリューション)
-
SQL ServerでTRUNCATEトランザクションをロールバックする方法
-
PowerDesignerでSQL Serverデータベースをインポートする方法
-
SQL Server 2005 の SQL 文の時限実行方法について
-
JDBCからSql Server 2005の概要
-
AccessからSQL Server 2005へのインポートの方法概要
-
SQL Server Connect to Server Error 233 の解決法