Group lãi suất (Rate) theo số tiền huy động trong SQL

Liên hệ QC

hoahuongduong1986

Thành viên thường trực
Tham gia
14/11/18
Bài viết
346
Được thích
40
Kính gửi anh chi và các Bạn,
Em chạy code sau để lấy lãi suất - Rate và số tiền huy động.

declare @Stage SMALLINT
set @Stage = 3

SELECT Rate,format(sum(Sodu_amt),'#,#') as DN
FROM Bang1
where MaCN in ('HQ0310') and BUSINESS_DATE = '20200430'
Group by Rate

Được kết quả kiểu như sau:
1600159163890.png
Giờ em muốn Group số liệu này theo kiểu sau
1600159239543.png
Nếu làm cái này trên Excel thì đơn giản (Pivot rồi Group với By = 3 chẳng hạn). Nhưng nếu chạy trên SQL em chưa nghĩ ra cách làm.
Nếu em tạo một cột phụ trên SQL thì sẽ làm được nhưng cảm giác nó khá thủ công và chưa khoa học lắm. Có cách code gì SQL làm được kiểu này không ạ.
Em đang hình dung em sẽ khai báo một Biến như em đã làm trên là @Stage = 3 tức là bước nhảy để Group. Thì code sao để nó làm được như kết quả ạ.
 
Toi đoán là kjhi nói SQL là bạn muốn nói T_SQL. Chứ mỗi phiên bản có cách sử lý khác.

T-SQL: Cách dễ nhất là làm một bảng tạm rồi join vào bảng đó. Tìm hiểu về With Common_Table_Expression
Cách thứ hai là làm một con toán để group by
Group by Floor((Rate-6.9)/@Stage)/3)
 
Lần chỉnh sửa cuối:
Toi đoán là kjhi nói SQL là bạn muốn nói T_SQL. Chứ mỗi phiên bản có cách sử lý khác.

T-SQL: Cách dễ nhất là làm một bảng tạm rồi join vào bảng đó. Tìm hiểu về With Common_Table_Expression
SQL Server anh ạ. Cái ;With Tên As (statement) thì em biết ạ. Tại em không muốn dùng bảng tạm mà có thể tính toán được không ạ.
 
Kính gửi anh chi và các Bạn,
Em chạy code sau để lấy lãi suất - Rate và số tiền huy động.

declare @Stage SMALLINT
set @Stage = 3

SELECT Rate,format(sum(Sodu_amt),'#,#') as DN
FROM Bang1
where MaCN in ('HQ0310') and BUSINESS_DATE = '20200430'
Group by Rate

Được kết quả kiểu như sau:
View attachment 245574
Giờ em muốn Group số liệu này theo kiểu sau
View attachment 245575
Nếu làm cái này trên Excel thì đơn giản (Pivot rồi Group với By = 3 chẳng hạn). Nhưng nếu chạy trên SQL em chưa nghĩ ra cách làm.
Nếu em tạo một cột phụ trên SQL thì sẽ làm được nhưng cảm giác nó khá thủ công và chưa khoa học lắm. Có cách code gì SQL làm được kiểu này không ạ.
Em đang hình dung em sẽ khai báo một Biến như em đã làm trên là @Stage = 3 tức là bước nhảy để Group. Thì code sao để nó làm được như kết quả ạ.
Kiểu gì cũng phải nhập các cái 6.9, 9.9 vào đâu đó

Nên phải nghĩ đễn phương án Select của Select kết hợp với CASE để phân nhóm
là có thể
 
Kiểu gì cũng phải nhập các cái 6.9, 9.9 vào đâu đó

Nên phải nghĩ đễn phương án Select của Select kết hợp với CASE để phân nhóm
là có thể
Dạ, em cũng nghĩ phương án này rồi ạ. Tại em muốn hỏi anh chị nào dùng nhiều có biết kiểu gì mới không ạ. Cảm ơn anh ạ.
 
SQL Server anh ạ. Cái ;With Tên As (statement) thì em biết ạ. Tại em không muốn dùng bảng tạm mà có thể tính toán được không ạ.
Thì dùng cách thứ 2, truy vấn phụ:

Set @RateStart = 6.9
Select ConCat('From ', (@RateStart + aa.[Rate_Range]), 'To <', (@RateStart + aa.[Rate_Range] + 1)), aa.[Debit]
From
( Seclect Floor((Rate-@RateStart)/@Stage) [Rate_Range], Sodu_amt [Debit]
From Bang1
where MaCN in ('HQ0310') and BUSINESS_DATE = '20200430' and Rate >= @RateStart) aa
Group By aa.[Rate_Range]
 
Thì dùng cách thứ 2, truy vấn phụ:

Set @RateStart = 6.9
Select ConCat('From ', (@RateStart + aa.[Rate_Range]), 'To <', (@RateStart + aa.[Rate_Range] + 1)), aa.[Debit]
From
( Seclect Floor((Rate-@RateStart)/@Stage) [Rate_Range], Sodu_amt [Debit]
From Bang1
where MaCN in ('HQ0310') and BUSINESS_DATE = '20200430' and Rate >= @RateStart) aa
Group By aa.[Rate_Range]
Dạ vâng ạ. Để em thử xem sao ạ. Cảm ơn anh ạ.
 
Tôi gõ nhanh quá ở bài #6 nên quên mất. Chỗ aa.[Debit] phải là SUM(aa.[Debit]) [Tot Debit]
Em xem code của anh mà em chưa hiểu lắm ạ. A giải thích giúp em được không ạ. Table của em chỉ bao gồm trường Rate, Sodu_amt. Nhưng code của anh em thấy có nhiều trường mới nên em chưa hiểu lắm ạ.
+ aa.[Debit]
+ aa.[Rate_Range]
+ Cấu trúc From .....To với em cũng lạ.
 
Em xem code của anh mà em chưa hiểu lắm ạ. A giải thích giúp em được không ạ. Table của em chỉ bao gồm trường Rate, Sodu_amt. Nhưng code của anh em thấy có nhiều trường mới nên em chưa hiểu lắm ạ.
+ aa.[Debit]
+ aa.[Rate_Range]
+ Cấu trúc From .....To với em cũng lạ.
Nó là tên tôi đặt thôi. Bạn dùng [nợ dư] tôi dịch ra là Debit.
Bạn dùng [Rate], tôi sửa thành [Rate_Range] vì tôi cho nó là một khoảng
Không có cấu trúc 'From' hay 'To' . Chỉ là những chuỗi tôi đặt vào hàm Concat để nó nói chuỗi thành:
From 6.9 To < 9.9
...
Hàm Concat có khả năng ép số thành chuỗi (6.9 -> '6.9'). Thay vì nếu dùng phép cộng chuỗi thì phải tự ép kiểu Convert(...)
 
Web KT
Back
Top Bottom