如何使用 SQL Server 資料庫查詢累計值

2021-01-20 站長之家
首頁

 > 

語言

 > 

關鍵詞

 > 

資料庫最新資訊

 > 

正文
如何使用 SQL Server 資料庫查詢累計值

有這樣一個要求,它要創建一個SQL Server查詢,其中包括基於事件時刻的累計值。典型的例子就是一個銀行帳戶,因為你每一次都是在不同的時間去存錢和取錢。對任意一個帳戶來說,在某個時間點都要算出它的借(存款)和貸(取款)之和。每一筆交易之後,你都想知道當前的餘額。列表A創建了這樣一個表格的簡單的例子。

以下為引用的內容:

CREATETABLE [dbo].[BankAccount]
([TransactionID] [int] IDENTITY(1,1)NOTNULL,
 [TransactionDateTime] [datetime] NOTNULLCONSTRAINT
[DF_BankAccount_TransactionDateTime]  DEFAULT(getdate()),
[Amount] [money] NOTNULLCONSTRAINT [DF_BankAccount_Amount]  DEFAULT((0)),
[TransactionType] [char](1)COLLATE SQL_Latin1_General_CP1_CI_AS NOTNULL,
[AccountNumber] [varchar](50)COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
 CONSTRAINT [PK_BankAccount] PRIMARYKEYCLUSTERED
(
      [TransactionID] ASC
)WITH(PAD_INDEX  =OFF, IGNORE_DUP_KEY =OFF)ON [PRIMARY]
)ON [PRIMARY]

列表A

下面是一些示例行:

以下為引用的內容:

1     2006-11-03 02:33:42.34010000.00
2     2006-11-03 02:34:50.467-500.00
3     2006-11-03 02:35:04.857250.00
4     2006-11-03 02:42:19.763-124.25

因為日期是預設設定的,你要做的就是加入一些金額。例子中為了簡單起見,假設只有一個銀行帳戶(為了更符合實際情況,可以添加一個BankAccountNumber列)。

現在你就能夠創建一個包括了當前餘額的查詢。因為你已經在同一列中用正負數值記錄了存款和取款值,所以列中的累計值是很容易算出的。你要得到當前的餘額,就要計算出以前所有交易的總值,然後將這個值和當前的交易相加。列表B中的查詢實現了這一點。

以下為引用的內容:

SELECT
transactionid,
transactiondatetime,
amount,

(SELECT SUM(amount)

FROM dbo.bankaccount as D1

WHERE D1.transactiondatetime <= D0.transactiondatetime) AS balance

FROM dbo.bankaccount AS D0

列表B

這樣就得到了以下的結果集:

以下為引用的內容:

1     2006-11-03 02:33:42.34010000.00    10000.00
2     2006-11-03 02:34:50.467-500.00     9500.00
3     2006-11-03 02:35:04.857250.00      9750.00
4     2006-11-03 02:42:19.763-124.25     9625.75

如這個例子所示,只要你理解了要求,就可以很容易地建立累計值。所示的例子假設表格中只包括一個帳戶,但是要處理多個帳戶也很簡單。添加一個BankAccountNumber 列和一個指定利息數量的WHERE謂詞即可。

你也可以把這個例子倒過來用,如在一個存貨計算中創建一個不同的運行。你從存貨1,000開始,然後減去各種花銷和收據。

這樣的查詢有兩個優點:

● 你不需要儲存結果。當用帳戶編號或外鍵操作時,執行可以如閃電般迅速。

● 你以一個標籤結束事務,它可以逐行進行檢查。如果出現問題的話,你可以將導致問題出現的事務隔離。

相關焦點

  • server sql 作業 使用專題及常見問題 - CSDN
    use masterGO/* --開啟sql server代理sp_configure 'show advanced options', 1; GO RECONFIGURE; GO sp_configure 'Agent XPs', 1; GO RECONFIGURE GO*/--定義創建作業
  • SQL server資料庫存儲過程測試方法
    此次介紹如何使用原始的SQL環境來測試SQL存儲過程。  問題  如何創建SQL資料庫以及表結構以用來保存測試用例的輸入數據和測試結果。  設計  編寫T-SQL腳本,創建一個資料庫然後創建一些表用來保存測試用例的輸入數據和測試結果。
  • 這個函數讓SQL效率提升99%
    窗口函數計算從窗口派生的結果集中各行的值。可以在單個查詢中將多個排名或聚合窗口函數與單個 FROM 子句一起使用。窗口函數是整個SQL語句最後被執行的部分,這意味著窗口函數是在SQL查詢的結果集上進行的, 因此不會受到Group By, Having,Where子句的影響。
  • 微軟 SQL Server 2016 SP1 發布
    資料庫克隆 - 克隆資料庫是一個新的 DBCC 命令,允許 DBA 並支持團隊通過克隆的模式和元數據來解決現有的生產資料庫的沒有數據統計的故障。克隆資料庫並不意味著在生產環境中使用。要查看是否已從調用clonedatabase生成資料庫,可以使用以下命令,選擇DATABASEPROPERTYEX('clonedb','isClone')。 返回值1為真,0為假。 在SQL Server 2016 SP1 中,DBCC CLONEDATABASE添加了支持克隆CLR、Filestream / Filetable、Hekaton和Query Store對象。
  • 三方法解決SQL Server與雲端資料庫連接
    【IT168專稿】SQL Azure 是構建在SQL Server技術之上的關係型雲端資料庫服務,為用戶提供了自主管理、高可用性、高可擴展的資料庫服務。用戶可以使用現有的T-SQL和關係型資料庫知識與工具,在雲端方便地構建自己的資料庫服務。
  • SQL Server 2016新亮點全揭秘
    【IT168 資訊】微軟即將在6月1號發布的SQL Server 2016可以為數據提供更好的安全性,並且能夠支持混合雲,能夠查詢非結構化的數據源。  很多企業發現在他們的資料庫裡有很大一部分的數據是結構化和非結構化的交織在一起的。在這種情況下,對於數據安全的要求就越來越高。
  • SQL Server 首次登陸 Linux 平臺
    近年來, SQL Server 正在一直演化,除了想一改 DMS(資料庫管理系統)的角色,還想介入到數據分析、機器學習和數據科學領域。2017 年 4 月份, SQL Server 發布了一個重要組件,支持在 SQL Server 中用 Python 運行機器學習負載。
  • SQL-server資料庫管理系統試卷及答案A
    學年第二學期《SQL-server 2000資料庫管理系統》試卷(A)使用班級:A、int和decimal B、nvarchar和datetimeC、image和text D、real和money9、使用「CREATE DATABASE AAA「命令所建立資料庫文件的初始大小是( )。
  • SQL Server跨伺服器操作資料庫?其實很簡單! - Excel教案
    DBLINK(資料庫連結),顧名思義就是資料庫的連結,就像電話線一樣,是一個通道,當我們要跨本地資料庫,訪問另外一個資料庫表中的數據時,本地資料庫中就必須要創建遠程資料庫的dblink,通過dblink本地資料庫可以像訪問本地資料庫一樣訪問遠程資料庫表中的數據。好了,廢話不多說,跟著我來一步一步的創建DBLINK吧。
  • 請確保你查詢mysql資料庫時,sql語句沒有這麼寫_手機網易網
    2020-11-23 19:20:11 來源: 小燕愛生活 舉報   資料庫索引
  • 優化SQL Server數據邏輯 提高查詢性能
    一般來說:①.有大量重複值、且經常有範圍查詢(between, > ,< ,> =,< =)和order by、group by發生的列,可考慮建立群集索引;②.經常同時存取多列,且每列都含有重複值可考慮建立組合索引;③.組合索引要儘量使關鍵查詢形成索引覆蓋,其前導列一定是使用最頻繁的列。索引雖有助於提高性能但不是索引越多越好,恰好相反過多的索引會導致系統低效。
  • 一條查詢SQL在MySQL中是怎麼執行的
    本文轉載自【微信公眾號:五角錢的程式設計師,ID:xianglin965】經微信公眾號授權轉載,如需轉載與原文作者聯繫平時我們使用的資料庫,看到的通常是一個整體,比如我們執行一條查詢SQL,返回一個結果集,卻不知道這條語句在MySQL內部是如何執行的,接下來我們就來簡單的拆解一下MySQL,看看MySQL是由哪些「零件」組成的
  • SQL Server 管理常用的SQL和T-SQL
    查看資料庫所在機器作業系統參數 exec master..xp_msver 3. 查看資料庫啟動的參數 sp_configure 4.把一臺伺服器上的資料庫用戶登錄信息備份出來可以用add_login_to_aserver腳本 查看某資料庫下,對象級用戶權限 sp_helprotect 7.
  • 資料庫是什麼?怎樣學習SQL Server資料庫?
    因為資料庫就是一種服務。資料庫就是一種服務拿SQL Server資料庫來說,你下載、安裝SQL Server之後,系統服務中就會多出來好幾個和SQL Server相關的服務。SQL Server服務是這些服務的核心,它提供數據的存儲、處理和訪問。為什麼叫做資料庫?
  • 最詳細的SQL注入相關的命令整理
    偶然間我想到了在SQL語言中可以使用"in"關鍵字進行查詢,例如"select * from mytable where id in(1)",括號中的值就是我們提交的數據,它的結果與使用"select * from mytable where id=1"的查詢結果完全相同。
  • NET開發-如何通過SSMS工具或SQL語句給SQL Server資料庫添加數據
    對於SQL Server資料庫中的表,當給表創建好列(欄位)之後,就可以添加數據了,由於數據表是二維表格,每一行數據都包含所有的列。在SQL Server中,即可以使用SSMS工具可視化處理數據,也可以使用標準的SQL語句處理數據。
  • c使用sql server專題及常見問題 - CSDN
    為php添加 sqlsrv 擴展去微軟官網 https://www.microsoft.com/en-us/download/ 搜索php ,點擊 Microsoft Drivers for PHP for SQL Server 下載最新版的 sqlsrvXX.exe( 我下載的是SQLSRV32.EXE )運行解壓, 得到一堆DLL, 選取適合自己
  • sqlserver——with as使用方法和注意事項
    目前手頭上的項目使用的資料庫是微軟的sql server2012,前兩天在項目開發中涉及到遞歸查詢和多張表的聯合查詢的應用場景,因此了解並使用了sql server 的with as,以下作為記錄什麼是with as
  • 如何使用SQL Server遊標
    【IT168 技術文檔】在資料庫開發過程中,當你檢索的數據只是一條記錄時,你所編寫的事務語句代碼往往使用SELECT INSERT 語句。但是我們常常會遇到這樣情況,即從某一結果集中逐一地讀取一條記錄。那麼如何解決這種問題呢?遊標為我們提供了一種極為優秀的解決方案。
  • SQL Server資料庫編程基本語法匯總
    set @a=5  print @a  --使用ST_User where ID=1  print @user2  --使用限制頗多,包括          ·不能使用output參數;          ·不能用臨時表;          ·函數內部的操作不能影響到外部環境;          ·不能通過select返回結果集;          ·不能update,delete,資料庫表;  3.