上一篇文章提到依日期彙總結果,這時候老闆又開需求了「Johnny 啊,能不能幫我多加一個欄位,讓我看到每個分店當月銷售額與上個月銷售額相比的成長百分比?」,這個需求也很常出現在我的程式設計生涯當中,我們來看看在 SQL Server 中怎麼來實現。
[小菜一碟] SQL Server 利用 LAG 及 LEAD 函數取得上一筆及下一筆資料列,來與當前資料列進行運算。
- 18613
- 0
- SQL Server
- 2019-05-12
上一篇文章提到依日期彙總結果,這時候老闆又開需求了「Johnny 啊,能不能幫我多加一個欄位,讓我看到每個分店當月銷售額與上個月銷售額相比的成長百分比?」,這個需求也很常出現在我的程式設計生涯當中,我們來看看在 SQL Server 中怎麼來實現。
假定老闆提了一個需求,他想要看每個分店每天的銷售額,如果當天沒有銷售額的分店則銷售額顯示為 0,這個需求我們從訂單資料庫裡面彙總出來就可以呈現了,但是它有一個點在於萬一某個分店在某天沒有訂單,那麼該分店在訂單資料庫是沒有資料的,則該分店的該天銷售額必須標為 0,類似這樣的需求經常在我的程式設計生涯中出現。
無論是業務需求或是 IT 需求的關係,依據不同需要將資料庫分放在不同伺服器的情形很多見,要進行跨資料庫伺服器交易我們可以啟用 MSDTC 服務來達成,我就在想能不能不去動伺服器的設定,在應用程式端來實現分散式交易?
各位朋友是不是有跟我一樣的症頭?從 SSMS 看到下面的欄位順序就想要給它調整一下?
即使警告資料表會被重建,我們還去把警告給關閉。
在 SQL Server 2017 出來以前,要做欄位資料合併顯示大都用 FOR XML,SQL Server 2017 加入了一個貼心的語法 STRING_AGG,大幅簡化了原本使用 FOR XML 的語法,我們來看 STRING_AGG 要怎麼使用?
系統中的程序(Applicaion、SQL Agent Job、Stored Procedure、...)一多,尤其大部分中小企業的資料庫增刪改並沒有得到良好的管理,重複的操作一直在做,資料若是正確的那大家相安無事,如果資料發生錯誤的時候,開發人員就雞飛狗跳了,眾多程序重複增刪改相同的資料,讓追查錯誤來源變成一件苦差事,萬一錯誤的資料又跟錢有關,那更是壓力山大,還好科技始終來自於人性,利用 SQL Server 的 Trigger 加上 DMV(Dynamic Management Views)可以幫助我們找到線索。
FOR JSON 語法是從 SQL Server 2016 開始支援,跟 FOR XML 一樣,我們可以將整筆記錄或是部分欄位輸出成 JSON 格式,輕鬆解決類別與類別之間一對一及一對多關係的情形,再搭配 Dapper 自定義 TypeHandler,讓關聯式資料庫的欄位與類別的對應轉換無聲無息。
如果是自架 IIS、SQL Server 伺服器,取得當前時間是看伺服器設定的時區在哪裡,就會拿到當地時區的當前時間,但是我們使用 Azure 提供的 PaaS 服務,只管用不必管伺服器,首要注意的是取得當下時間的 API 預設時區 UTC 的問題,務必在上雲之前針對自己的程式調整一番。
SQL Server 的 PIVOT
及 UNPIVOT
運算子用來將資料表中的欄轉置為列、列轉置為欄,將資料表中指定的欄位做旋轉,因為經常用到的時候就要再 Google 一次,所幸就自己寫一篇記錄一下,而且在轉置的過程中還順便彙總,一個常看到的範例就是計算銷售人員 1 ~ 12 月的銷售金額,並將 1 ~ 12 月當做欄位名稱 SELECT 出來,除此之外還可以拿來對付一些特別的設計。
原以為在 CentOS 7 上安裝 MySQL 是探嚢取物,照著官方的步驟按圖施工,必定成功,還是踩了幾顆地雷炸掉我不少時間,我選擇安裝 MySQL 的方式是用二進制包(Generic Binaries)的安裝方式,這種方式可以讓我更方便地修改環境變數,照著官方的步驟是一定可以安裝成功的,但是有幾點我們需要注意一下。