Office中國(guó)論壇/Access中國(guó)論壇

 找回密碼
 注冊(cè)

QQ登錄

只需一步,快速開始

返回列表 發(fā)新帖
查看: 3768|回復(fù): 10
打印 上一主題 下一主題

[查詢] 【Access小品】靈機(jī)一動(dòng) -- 一個(gè)有趣的算法

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
1#
發(fā)表于 2015-2-6 16:53:46 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
本帖最后由 todaynew 于 2015-2-7 18:03 編輯

  有一個(gè)版友最近在折騰會(huì)計(jì)科目之間的計(jì)算問題,零零碎碎發(fā)了很多的帖子。今天看到一個(gè)關(guān)于費(fèi)用和利潤(rùn)算法的問題,便覺得算法上有些羅嗦,便私下里想找一個(gè)更為簡(jiǎn)單一些的算法。

  我們知道會(huì)計(jì)采用借貸記賬法,其中資產(chǎn)、成本及費(fèi)用類科目增加計(jì)入借方,減少計(jì)入貸方,而負(fù)債、權(quán)益、收入類科目相反,并以此實(shí)現(xiàn)借貸平衡。這樣就在計(jì)算期末余額的絕對(duì)值上,會(huì)出現(xiàn)前一類科目的計(jì)算公式與后一類科目的計(jì)算公式中,出現(xiàn)正負(fù)號(hào)相反的問題。比如,計(jì)算應(yīng)收賬款和應(yīng)付賬款的期末余額,計(jì)算公式分別如下:

  應(yīng)收賬款期末余額=期初余額+借方發(fā)生額合計(jì)-貸方發(fā)生額合計(jì)

  應(yīng)付賬款期末余額=期初余額-借方發(fā)生額合計(jì)+貸方發(fā)生額合計(jì)

  假設(shè)我們有一個(gè)查詢中存在這樣幾個(gè)字段:科目編號(hào),科目名稱,類型(True/False),期初余額,借方發(fā)生額合計(jì),貸方發(fā)生額合計(jì),其中類型為True表示資產(chǎn)、成本及費(fèi)用類科目,為False表示負(fù)債、權(quán)益、收入類科目。那么我們求期末余額的話,是可以這樣來寫的:

  select *,iif(類型=True,期初余額+借方發(fā)生額合計(jì)-貸方發(fā)生額合計(jì),期初余額-借方發(fā)生額合計(jì)+貸方發(fā)生額合計(jì)) as 期末余額
  from 查詢1

    問題在于,我們是否一定需要用iif函數(shù)呢?我想應(yīng)該可以不用。因?yàn)槲覀冎涝贏ccess中,True=-1,F(xiàn)alse=0,如果能利用布爾值的這個(gè)特性,那就可以簡(jiǎn)化算法,F(xiàn)在的問題是需要將數(shù)組{-1,0},變換為{-1,1},只要這個(gè)變換能實(shí)現(xiàn),那么就可以容易的寫出算式了。我們可以這樣來變換:

  2×{-1,0} => {2×(-1),2×0} => {-2,0}+1 => {-2+1,0+1} => {-1,1}   

  也就是說:

  2×{-1,0}+1 => {-1,1}


  基于這樣的變換,我們的查詢就可以簡(jiǎn)化為:

  select *,期初余額+(貸方發(fā)生額合計(jì)-借方發(fā)生額合計(jì))*(類型*2+1) as 期末余額
  from 查詢1

  我是比較討厭用iif函數(shù)的,所以通常遇到iif函數(shù),我就試圖轉(zhuǎn)換一個(gè)算法來解決問題,這種轉(zhuǎn)換我覺得很有趣味。




本帖被以下淘專輯推薦:

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享分享 分享淘帖2 訂閱訂閱
2#
發(fā)表于 2015-2-7 08:26:21 | 只看該作者
謝謝todaynew版主的幫助,我用你的方法來試試。

點(diǎn)擊這里給我發(fā)消息

3#
發(fā)表于 2015-2-7 09:55:40 | 只看該作者
贊一個(gè)!
回復(fù)

使用道具 舉報(bào)

點(diǎn)擊這里給我發(fā)消息

4#
發(fā)表于 2015-2-7 09:59:51 | 只看該作者
新穎的想法!
5#
發(fā)表于 2015-2-7 13:21:01 | 只看該作者
這才是大俠級(jí)別,學(xué)習(xí)了!
6#
發(fā)表于 2015-2-12 11:08:30 | 只看該作者
有利有弊,犧牲了可讀性,但贏得了執(zhí)行效率。

點(diǎn)評(píng)

哥們好悟性.事物都有兩面性  發(fā)表于 2015-2-12 13:00

點(diǎn)擊這里給我發(fā)消息

7#
發(fā)表于 2015-2-13 13:10:20 | 只看該作者
老漢點(diǎn)子多{:soso_e179:}
8#
發(fā)表于 2015-5-1 15:39:04 | 只看該作者
我來學(xué)習(xí)學(xué)習(xí),看一下

點(diǎn)擊這里給我發(fā)消息

9#
發(fā)表于 2015-11-22 10:38:48 | 只看該作者
謝謝分享
回復(fù)

使用道具 舉報(bào)

10#
發(fā)表于 2016-8-20 15:24:22 | 只看該作者
#在這里快速回復(fù)#已經(jīng)下載學(xué)習(xí),謝謝
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則

QQ|站長(zhǎng)郵箱|小黑屋|手機(jī)版|Office中國(guó)/Access中國(guó) ( 粵ICP備10043721號(hào)-1 )  

GMT+8, 2025-7-16 18:22 , Processed in 0.132473 second(s), 39 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回復(fù) 返回頂部 返回列表