Sử dụng ROW_NUMBER, RANK, và DENSE_RANK

Trong bài viết này, mình sẽ hướng dẫn các bạn sử dụng các hàm ROW_NUMBER, RANK, và DENSE_RANK().
Trong bài viết này sử dụng AdventureWorks2016, bạn có thể download tại: https://www.microsoft.com/en-us/download/details.aspx?id=49502

Phân biệt ROW_NUMBER, RANK, và DENSE_RANK

Đầu tiên, bạn nhìn ví dụ sau:

SELECT CustomerID, SalesOrderID, CAST(OrderDate AS DATE) AS OrderDate,
 ROW_NUMBER() OVER(ORDER BY OrderDate) AS [ROW_NUMBER],
 RANK() OVER(ORDER BY OrderDate) AS [RANK],
 DENSE_RANK() OVER(ORDER BY OrderDate) AS [DENSE_RANK] FROM Sales.SalesOrderHeader
 WHERE CustomerID = 11300;
Kết quả:

Cả 3 hàm đều Order by OrderDate
Hàm ROW_NUMBER dùng để xếp hạng kết quả một cách tuần tự bắt đầu từ 1 và không quan tâm đến các giá trị giống nhau.
Cú pháp:

ROW_NUMBER ( ) 
    OVER ( [ PARTITION BY value_expression , ... [ n ] ] order_by_clause )
Tại dòng thứ 7 và dòng 8, giá trị OrderDate đều giống nhau. RANK và DENSE_RANK đều trả về giá trị là 7.
Tại dòng thứ 9, hàm RANK trực tiếp bắt kịp giá trị của ROW_NUMBER bằng cách bỏ đi giá trị 8. Còn DENSE_RANK thì trả về giá trị tiếp theo dựa trên dòng trước đó.
Tương tự với các dòng 12, 13, và dòng 14.

Khắc phục lỗi Retrieving the COM class factory tạo file Excel bằng Microsoft.Office.Interop

Vấn đề

Khi tạo file Excel bằng thư viện Microsoft.Office.Interop.Excel, và host ở môi trường IIS, bạn sẽ gặp lỗi:
Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046} failed due to the following error: 80070005

Angular: Tạo mới một component

Một trong những ý tưởng lớn đằng sau Angular là ý tưởng về các component.
Trong các ứng dụng Angular, chúng ta viết các đoạn mã HTML để tạo ứng dụng tương tác với client, nhưng trình duyệt chỉ hiểu rất nhiều thẻ đánh dấu; Tất cả các phần dựng sẵn như <select>, <form> hoặc <video>… Các chức năng đó được xác định bởi trình duyệt.
Điều gì xảy ra nếu chúng ta muốn dạy cho trình duyệt các thẻ mới? Điều gì xảy ra nếu chúng ta muốn có một thẻ <Weather>.

Những extension cần thiết khi code Angular bằng Visual Studio Code

  1. Angular v7 Snippets
  2. Angular Files
  3. Angular Language Service
  4. Angular2-switcher
  5. Auto Rename Tag
  6. Bracket Pair Colorizer
  7. Debugger for Chrome
  8. Material Icon Theme
  9. Path Intellisense
  10. Prettier - Code formatter
  11. TSLint

Cách cài đặt và sử dụng bộ gõ tiếng Quảng Đông (Cantonese) trên windows 10 từ phiên bản 1809

Trong bài viết này, mình sẽ hướng dẫn các bạn cài đặt và sử dụng bộ gõ tiếng Quảng trong Windows. Các bạn có thể cài app khác để gõ tiếng Quảng, nhưng nó không nằm trong phạm vi bài này.

Cài đặt Chinese package

Vào Settings->Language-> Add a language-> chọn

Sau khi cài đặt, bạn vào option 中文-> chọn Add a method


Từ Windows version 1809 trở về sau, bạn không thể cài đặt Jyutping từ Windows.

AdventureWorks sample databases

This GitHub repository contains code samples that demonstrate how to use Microsoft's SQL products including SQL Server, Azure SQL Database, and Azure SQL Data Warehouse. Each sample includes a README file that explains how to run and use the sample.
Link:
https://github.com/Microsoft/sql-server-samples/releases/tag/adventureworks


TortoiseSVN: Tự động loại bỏ folder bin và obj

Bạn vào Tortoise SVN --> properties và thêm mẫu ignore như sau:
 Bạn chọn New => Other
Bạn thêm vào đoạn code sau:

bin
obj
*.user
*.suo
*.bak
.vs
Bạn nhớ stick vào option "Apply property recursively" trước khi bấm OK
 Chúc các bạn thành công!

Custom ASP.NET Validation

Trong bài viết này, mình sẽ hướng dẫn các bạn tùy biến Validator trong ASP.NET MVC và cách viết 1 validator ở phía Client side.

Custom ASP.NET Validator

Trong ví dụ này, chúng ta sẽ viết 1 custom validator để kiếm tra giá trị của 1 property này sẽ không bằng giá trị của 1 property khác.
Trong form này, bạn sẽ kiểm tra 2 field UserName và Password. Nếu giá trị Password bằng với UserName, sẽ xuất thông báo lỗi: Password cannot be the same as Username


Hướng dẫn sử dụng Log4Net: Viết 1 appender cho Log4Net (Part 2)

Appender là gì?

Appender là 1 output cho 1 bản ghi, ví dụ như console, file, email, hoặc là database. Log4Net đã định nghĩa rất nhiều appender mà hầu như chúng ta chỉ cần khai báo và xài, không cần định nghĩa thêm. Nhưng trong 1 số trường hợp, ví dụ như bạn muốn viết 1 appender mới để sử dụng cho ServiceBus, hoặc gởi data lên EventHub thì lúc đó bạn phải viết 1 appender mới.
Trong bài viết này, mình sẽ hướng dẫn các bạn viết 1 appender mới theo cách đơn giản nhất, xuất message ra file text. Từ ví dụ này, bạn có thể phát triển thêm nhiều appender tùy theo nhu cầu.

Hướng dẫn sử dụng Log4Net

Trong bài viết này, mình sẽ hướng dẫn cho các bạn cách sử dụng Log4Net đơn giản.
Đây là 1 công cụ log khá mạnh, cho phép bạn cấu hình thật đơn giản trong app.config, với chế độ log messages. Ngoài ra, bạn có thể tùy biến và log message lên Azure chỉ với 1 vài dòng code.